Sto facendo TDD. Diciamo che mi aspetto un metodo m
di qualche classe C
per chiamare qualche funzione f
(per mantenere le cose veramente semplici).
Come progetterei un unit test che verrebbe a prendere e quindi fallire, se m
dovesse essere implementato come:
m(func f)
{
// let's say some_internal_counter starts at 0 when object initialised.
if (some_internal_counter < 10)
{
f();
some_internal_counter++;
}
}
Un test unitario come il seguente non solo passerà, ma determinerà anche una copertura del 100% del codice:
C c = new C(); // C.some_internal_counter at 0, but the one writing this test doesn't know (or shouldn't know) this.
func f = SomeMockFunc();
c.m(f);
Expect(f).ToBeCalled();
Ma non è stato salvaguardato dal dipendere da uno stato interno (non autorizzato). Quindi il programma si aprirà verso prod (dato che tutto è verde) e non funzionerà quando m
viene chiamato più di 10 volte.