Тестирование модулей Wallet и User с использованием Google Test
Цель: Проверить корректность работы классов Wallet и User, разработанных для управления кошельком пользователя, с использованием фреймворка Google Test.
Задачи:
Реализовать набор тестов для класса Wallet, который будет проверять основные функции:
Проверка корректного начального баланса.
Проверка добавления денег на счет.
Проверка расходования средств.
Проверка обработки исключения InsufficientAmount при попытке снятия средств больше, чем есть на счету.
Реализовать набор тестов для класса 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;
}