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

Кошелек интеграция

Тестирование модулей Wallet и User с использованием Google Test

Цель: Проверить корректность работы классов Wallet и User, разработанных для управления кошельком пользователя, с использованием фреймворка Google Test.

Задачи:

  1. Реализовать набор тестов для класса Wallet, который будет проверять основные функции:

    • Проверка корректного начального баланса.

    • Проверка добавления денег на счет.

    • Проверка расходования средств.

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

  2. Реализовать набор тестов для класса User, который будет проверять следующие функции:

    • Проверка корректной привязки кошелька к пользователю.

    • Проверка корректного начального баланса кошелька пользователя.

    • Проверка добавления денег на кошелек пользователя.

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

Критерии приемки:

  • Все тесты успешно проходят без ошибок.

  • Тесты покрывают основные сценарии использования классов Wallet и User.

  • Обработка исключений корректно работает в соответствующих ситуациях.

  • Код тестов читаем, понятен и хорошо структурирован.

wallet.h:

#ifndef WALLET_H
#define WALLET_H

#include <iostream>
#include <stdexcept>

// Класс для исключения, которое будет брошено в случае недостаточного количества средств
class InsufficientAmount : public std::exception {
public:
    // Переопределение метода what() для возврата сообщения об ошибке
    const char* what() const noexcept override {
        return "Недостаточно средств на счету.";
    }
};

// Класс для кошелька
class Wallet {
private:
    int wallet_id; // идентификатор кошелька
    int balance; // баланс в рублях

public:
    // Конструктор, принимающий идентификатор и начальный баланс (по умолчанию 0)
    Wallet(int id, int balance = 0);

    // Метод для получения идентификатора кошелька
    int get_wallet_id() const;

    // Метод для получения текущего баланса
    int get_balance() const;

    // Метод для добавления денег на счет
    void add_cash(int amount);

    // Метод для расходования средств
    void spend_cash(int spend_sum);
};

#endif // WALLET_H

wallet.cpp:

#include "wallet.h"

// Конструктор, принимающий идентификатор и начальный баланс (по умолчанию 0)
Wallet::Wallet(int id, int balance) : wallet_id(id), balance(balance) {}

// Метод для получения идентификатора кошелька
int Wallet::get_wallet_id() const {
    return wallet_id;
}

// Метод для получения текущего баланса
int Wallet::get_balance() const {
    return balance;
}

// Метод для добавления денег на счет
void Wallet::add_cash(int amount) {
    balance += amount;
    std::cout << "Баланс кошелька " << wallet_id << ": " << balance << std::endl;
}

// Метод для расходования средств
void Wallet::spend_cash(int spend_sum) {
    // Проверяем, есть ли достаточное количество средств на счету
    if (spend_sum <= balance) {
        // Если есть, уменьшаем баланс на сумму расхода
        balance -= spend_sum;
        std::cout << "Баланс кошелька " << wallet_id << ": " << balance << std::endl;
    } else {
        // Если недостаточно средств, бросаем исключение
        throw InsufficientAmount();
    }
}

user.h:

#ifndef USER_H
#define USER_H

#include "wallet.h"

// Класс для пользователя
class User {
private:
    std::string name; // имя пользователя
    Wallet wallet; // кошелек пользователя

public:
    // Конструктор, принимающий имя пользователя, идентификатор кошелька и начальный баланс
    User(const std::string& name, int wallet_id, int initial_balance = 0);

    // Метод для получения имени пользователя
    std::string get_name() const;

    // Метод для получения идентификатора кошелька пользователя
    int get_wallet_id() const;

    // Метод для получения баланса кошелька пользователя
    int get_wallet_balance() const;

    // Метод для добавления денег на кошелек пользователя
    void add_money_to_wallet(int amount);

    // Метод для расходования денег с кошелька пользователя
    void spend_money_from_wallet(int amount);
};

#endif // USER_H

user.cpp:

#include "user.h"

// Конструктор, принимающий имя пользователя, идентификатор кошелька и начальный баланс
User::User(const std::string& name, int wallet_id, int initial_balance) : name(name), wallet(wallet_id, initial_balance) {}

// Метод для получения имени пользователя
std::string User::get_name() const {
    return name;
}

// Метод для получения идентификатора кошелька пользователя
int User::get_wallet_id() const {
    return wallet.get_wallet_id();
}

// Метод для получения баланса кошелька пользователя
int User::get_wallet_balance() const {
    return wallet.get_balance();
}

// Метод для добавления денег на кошелек пользователя
void User::add_money_to_wallet(int amount) {
    wallet.add_cash(amount);
}

// Метод для расходования денег с кошелька пользователя
void User::spend_money_from_wallet(int amount) {
    wallet.spend_cash(amount);
}

main.cpp:

#include <iostream>
#include "user.h"

// Функция main для демонстрации использования
int main() {
    // Создаем пользователя с именем "Alice", идентификатором кошелька 1 и начальным балансом 100 рублей
    User alice("Alice", 1, 100);
    std::cout << "Имя пользователя: " << alice.get_name() << std::endl;
    std::cout << "Идентификатор кошелька: " << alice.get_wallet_id() << std::endl;
    std::cout << "Баланс кошелька: " << alice.get_wallet_balance() << std::endl;

    // Добавляем на кошелек пользователя 50 рублей
    alice.add_money_to_wallet(50);

    // Расходуем 70 рублей с кошелька пользователя
    alice.spend_money_from_wallet(70);

    return 0;
}

PreviousЗадание кошелекNextЗадачи профилирование

Last updated 1 year ago

📚