Diciamo che provo a testare la funzione di aggiunta della calcolatrice.
Test 1:
public void Adding_0_And_0_Should_Return_0() { ... }
Produzione 1:
public int Add(int a, int b)
{
return 0;
}
Test 2:
public void Adding_3_And_0_Should_Return_3() { ... }
Produzione 2:
public int Add(int a, int b)
{
return a;
}
Test 3:
public void Adding_6_And_4_Should_Return_10() { ... }
Produzione 3:
public int Add(int a, int b)
{
return a + b;
}
Puoi vedere i test diventare gradualmente più specifici (presi nel loro insieme - applicando più vincoli con ogni caso), e di conseguenza, a ogni iterazione, l'implementazione diventa più generica, perché una singola implementazione deve gestire un numero crescente di casi di test specifici.
Quindi inizialmente il tuo codice di produzione può gestire solo un caso in cui il risultato dell'aggiunta è 1. Quindi con la seconda iterazione puoi gestire un caso più generico, dove il tuo primo numero può essere qualsiasi cosa tu voglia, purché tu sia " aggiungendolo a 0. Con il caso finale, si diventa completamente generici, essendo in grado di aggiungere due numeri, non solo quelli specifici dei test precedenti.