Вы должны проверить свой класс, используя только общедоступные «конечные точки», доступные для его потребителей.
В вашем случае это будет constructor
, AddTransaction
и Balance
.
Ответственность вашего класса заключается в добавлении транзакций и расчете баланса.
Таким образом, в ваших тестах вы добавите транзакции и убедитесь, что Balance
возвращает ожидаемый результат. Метод AddTransaction
будет проверен с помощью тестов для свойства Balance
.
Если вы подходите к решению, сначала написав тесты, вам не нужно беспокоиться о том, есть ли личный список или словарь или что-то еще.
Например, первый тест будет выглядеть как
var transaction = new Transaction(12.4m, "note", 12.January(2018));
var account = new Account();
account.AddTransaction(transaction);
account.Balance.Should().Be(12.4m);
Второй тест
var transaction1 = new Transaction(50.00m, "note1", 12.January(2018));
var transaction2 = new Transaction(45.99m, "note2", 13.January(2018));
var transaction3 = new Transaction(4.01m, "note3", 14.January(2018));
var account = new Account();
account.AddTransaction(transaction1);
account.AddTransaction(transaction2);
account.AddTransaction(transaction3);
account.Balance.Should().Be(100.0m);
Где реализация может быть
private decimal _balance;
public void AddTransaction(Transaction transaction)
{
_balance += transaction.Amount;
}
public decimal Balance => _balance;
Как видите, класс можно реализовать без списка. Подход, описанный выше, может быть эффективен в случае, когда приложение использует Balance
намного больше, чем AddTransaction
метод.
Наличие тестов, которые не знают о реализации, может дать вам некоторую свободу для рефакторинга тестируемого класса без изменения тестов.