Dove / come si disegna la linea per le classi di test unitari a diversi livelli di una gerarchia? Ad esempio, supponiamo di avere una struttura come questa:
public class Account
{
public Money CurrentBalance { get; } => ComputeBalance(_transactions);
public Money BalanceByDate(DateTime date)
{
// ComputeBalance through date
}
// More accounting functions
}
public class Ledger
{
public void CreateNewAccount(/* Account Details */)
{
// Create a new account
_accounts.Add(account);
}
public Account GetAccountByName(AccountName name)
{
// return an account if/when found by name
}
public void PostTransaction(Transaction transaction)
{
// add a transaction to two different accounts
}
// More ledger functions
private readonly List<Account> _accounts = new List<Account>();
}
Ho una classe AccountTests che ovviamente verifica le funzioni dell'account come CurrentBalance, BalanceByDate (), ecc. Tuttavia, la domanda è:
D) Quanto di Ledger devo testare? Devo solo controllare che Ledger restituisca un account? Oppure devo ricontrollare tutte le funzioni dell'account poiché Ledger pubblicherà le transazioni su 2 account diversi (ad esempio, controlla nuovamente CurrentBalance ma questa volta per ogni coppia di account (account accreditato e conto addebitato).
Sto facendo TDD (anche se non sono sicuro di quanto bene), e sento che sto testando più cose diverse volte.