No! Non così com'è.
O hai bisogno di molto più profondità, o molto meno -adattando molto alla particolare unità in questione. Così com'è, il tuo test convalida solo che doSomething()
restituisce il valore di ritorno di ex3.doit()
.
Quindi ...
Se ti interessa come doSomething()
fa il suo lavoro ... non è necessariamente atipico per testare un un adattatore , facciata o qualsiasi tipo di wrapper in questo modo. Ma devi bloccare questa implementazione e il tuo test cade tristemente. In realtà non garantisce che il wrapper gestisca correttamente l'intero processo.
Per raggiungere questo livello di affidabilità, devi anche convalidare che ogni metodo interno sia invocato quando previsto, come previsto.
Tuttavia, questo è un bisogno raro, nella mia esperienza. Ho solo veramente dovuto convalidare i dettagli di implementazione interna una volta .. Costruire un logger di richieste API: dovevo assicurarmi che il logger gestisse una connessione HTTP sottostante in un modo molto particolare. E non ero libero di eseguire un test di integrazione completo ... perché avrei sbattuto un'API di produzione (fuori dal mio controllo) con dati di test.
In questo caso, ho effettivamente realizzato falsi completi delle classi HTTP che userei in produzione. Ho registrato ogni piccola interazione tra il mio registratore e la risorsa che stava gestendo. E, ho avuto un sacco di test che hanno affermato i dettagli di quelle interazioni.
Ma, nella maggior parte dei casi, ai tuoi test non dovrebbe importare come funziona doSomething()
. Dovrebbero solo preoccuparsi che gli effetti e i risultati siano corretti.
Quindi, se non ti interessa come doSomething()
svolge effettivamente il suo lavoro ... scrivi solo un test di integrazione.
Un "test di integrazione" è ancora, a mio parere, un "test unitario". L'unità sembra essere "grande".