unit tests
  • Установка Google Test
    • через VS 2022
  • Что тестировать как тестировать
    • Test Suites
  • Google Test примеры
  • Параметризация примеры
  • Функции expect и assert
    • EXPECT_*
  • Пример setUP() TearDown()
  • Тестирование производительности
  • Профилирование
    • ЦП Аналитика
    • Пример
  • пример тестирование записи в файл
  • 📚Tasks
    • Задание на повторение
    • Задание calculate_average
    • Задание
    • Задание 2
    • Задание 3
    • Задание Интеграционное тестирование
    • Задание 4 треугольник интеграция
    • Задание кошелек
    • Кошелек интеграция
    • Задачи профилирование
    • Задание Task
  • Пример
Powered by GitBook
On this page
  1. Tasks

Задание Интеграционное тестирование

Задание на тестирование модуля управления пользователями и их финансами:

  1. Регистрация пользователя:

    • Проверить, что пользователь успешно регистрируется при вводе корректных данных.

    • Проверить, что пользователь не может зарегистрироваться с уже существующим именем.

    • Проверить, что пользователь не может зарегистрироваться с пустым именем, паролем или начальным балансом.

  2. Авторизация пользователя:

    • Проверить, что пользователь успешно авторизуется при вводе корректных данных.

    • Проверить, что пользователь не авторизуется при вводе неправильного имени или пароля.

    • Проверить, что пользователь не авторизуется с пустым именем или паролем.

  3. Начисление денег на счет пользователя:

    • Проверить, что сумма начисления корректно добавляется к балансу пользователя.

    • Проверить, что пользователь не может начислить отрицательную сумму на счет.

    • Проверить, что пользователь не может начислить на счет сумму, превышающую максимальное значение для типа данных.

  4. Снятие денег со счета пользователя:

    • Проверить, что сумма снятия корректно вычитается из баланса пользователя.

    • Проверить, что пользователь не может снять отрицательную сумму со счета.

    • Проверить, что пользователь не может снять сумму, превышающую текущий баланс.

  5. Просмотр баланса пользователя:

    • Проверить, что выводится корректный текущий баланс пользователя после начисления и снятия денег.

Каждый тест-кейс должен проверять один конкретный аспект функциональности, а результаты тестирования должны быть документированы для последующей отладки и анализа.

user_management.h/.cpp:

  • Модуль user_management отвечает за управление пользователями.

  • user_management.h содержит объявления структуры User и функций registerUser и login.

  • user_management.cpp содержит реализацию функций registerUser и login.

  • Функция registerUser позволяет регистрировать новых пользователей, сохраняя их данные в файле.

  • Функция login позволяет авторизовать пользователей по их имени и паролю, используя данные из файла.

// user_management.h
#ifndef USER_MANAGEMENT_H
#define USER_MANAGEMENT_H

#include <string>

struct User {
    std::string username;
    std::string password;
    double balance;
};

bool registerUser(const std::string& username, const std::string& password, double balance);
User* login(const std::string& username, const std::string& password);

#endif // USER_MANAGEMENT_H
// user_management.cpp
#include "user_management.h"
#include <fstream>
#include <iostream>

bool registerUser(const std::string& username, const std::string& password, double balance) {
    std::ofstream file("users.txt", std::ios::app); // Открываем файл для добавления новых пользователей
    if (!file.is_open()) {
        std::cerr << "Ошибка открытия файла!" << std::endl;
        return false;
    }

    file << username << ":" << password << ":" << balance << std::endl; // Записываем нового пользователя в файл
    file.close();
    return true; // Успешно зарегистрирован
}

User* login(const std::string& username, const std::string& password) {
    std::ifstream file("users.txt");
    if (!file.is_open()) {
        std::cerr << "Ошибка открытия файла!" << std::endl;
        return nullptr;
    }

    std::string line;
    while (std::getline(file, line)) {
        size_t pos1 = line.find(':');
        size_t pos2 = line.find(':', pos1 + 1);
        std::string storedUsername = line.substr(0, pos1);
        std::string storedPassword = line.substr(pos1 + 1, pos2 - pos1 - 1);
        std::string balanceStr = line.substr(pos2 + 1);
        double storedBalance = std::stod(balanceStr);

        if (storedUsername == username && storedPassword == password) {
            file.close();
            return new User{username, password, storedBalance}; // Возвращаем пользователя с найденным именем и паролем
        }
    }
    
    file.close();
    return nullptr; // Неправильное имя пользователя или пароль
}

main.cpp:

Модуль main содержит пример использования функций регистрации и авторизации, а также методов для работы с балансом пользователя.

  1. processRegisterCommand(): Обрабатывает команду регистрации нового пользователя. Запрашивает у пользователя имя, пароль и начальный баланс, затем вызывает функцию registerUser для регистрации пользователя.

  2. processLoginCommand(): Обрабатывает команду авторизации пользователя. Запрашивает у пользователя имя и пароль, затем вызывает функцию login для попытки входа пользователя в систему.

  3. processDepositCommand(User* user): Обрабатывает команду начисления денег на счет пользователя. Запрашивает у пользователя сумму для начисления и вызывает функцию deposit для увеличения баланса пользователя.

  4. processWithdrawCommand(User* user): Обрабатывает команду снятия денег со счета пользователя. Запрашивает у пользователя сумму для снятия и вызывает функцию withdraw для уменьшения баланса пользователя, если на счету достаточно средств.

  5. processBalanceCommand(User* user): Обрабатывает команду просмотра баланса пользователя. Выводит на экран текущий баланс пользователя.

#include <iostream>
#include <string>
#include "user_management.h"

// Функция для обработки команды регистрации нового пользователя
void processRegisterCommand() {
    std::string username, password;
    double initial_balance;
    std::cout << "Введите имя пользователя, пароль и начальный баланс через пробел: ";
    std::cin >> username >> password >> initial_balance;
    if (registerUser(username, password, initial_balance)) {
        std::cout << "Пользователь успешно зарегистрирован!" << std::endl;
    } else {
        std::cerr << "Ошибка регистрации пользователя!" << std::endl;
    }
}

// Функция для обработки команды авторизации пользователя
User* processLoginCommand() {
    std::string username, password;
    std::cout << "Введите имя пользователя и пароль через пробел: ";
    std::cin >> username >> password;
    return login(username, password);
}

// Функция для обработки команды начисления денег на счет
void processDepositCommand(User* user) {
    double amount;
    std::cout << "Введите сумму для зачисления на счет: ";
    std::cin >> amount;
    deposit(user, amount);
}

// Функция для обработки команды снятия денег со счета
void processWithdrawCommand(User* user) {
    double amount;
    std::cout << "Введите сумму для снятия со счета: ";
    std::cin >> amount;
    withdraw(user, amount);
}

// Функция для обработки команды просмотра баланса
void processBalanceCommand(User* user) {
    std::cout << "Баланс на вашем счете: " << user->balance << std::endl;
}

int main() {
    User* currentUser = nullptr;

    while (true) {
        std::cout << "Доступные команды:" << std::endl;
        std::cout << "1. Регистрация нового пользователя" << std::endl;
        std::cout << "2. Авторизация пользователя" << std::endl;
        std::cout << "3. Начисление денег на счет" << std::endl;
        std::cout << "4. Снятие денег со счета" << std::endl;
        std::cout << "5. Просмотр баланса" << std::endl;
        std::cout << "6. Выход из программы" << std::endl;
        std::cout << "Введите номер команды: ";

        int command;
        std::cin >> command;

        switch (command) {
            case 1:
                processRegisterCommand();
                break;
            case 2:
                currentUser = processLoginCommand();
                if (currentUser != nullptr) {
                    std::cout << "Успешная авторизация! Добро пожаловать, " << currentUser->username << "!" << std::endl;
                } else {
                    std::cerr << "Ошибка авторизации!" << std::endl;
                }
                break;
            case 3:
                if (currentUser != nullptr) {
                    processDepositCommand(currentUser);
                } else {
                    std::cerr << "Необходимо сначала авторизоваться!" << std::endl;
                }
                break;
            case 4:
                if (currentUser != nullptr) {
                    processWithdrawCommand(currentUser);
                } else {
                    std::cerr << "Необходимо сначала авторизоваться!" << std::endl;
                }
                break;
            case 5:
                if (currentUser != nullptr) {
                    processBalanceCommand(currentUser);
                } else {
                    std::cerr << "Необходимо сначала авторизоваться!" << std::endl;
                }
                break;
            case 6:
                std::cout << "Программа завершена." << std::endl;
                return 0;
            default:
                std::cerr << "Некорректная команда!" << std::endl;
                break;
        }
    }

    return 0;
}

PreviousЗадание 3NextЗадание 4 треугольник интеграция

Last updated 1 year ago

📚