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.