Design per i test, ma non eseguire il codice per i test
Usi metodi privati per ridurre il codice. Meno codice è sempre più stabile. Estrarre un metodo privato in un'altra classe in modo che possa essere testato genera più codice e rende qualcosa che era nel dominio della classe ora una cosa esterna.
Se una classe è utilizzata solo da un'altra classe. Che le due classi siano rappresentazioni parziali di un'intera classe, allora hai un problema. Mentre i tuoi test unitari stanno per passare, non passeranno a lungo. Stanno per rompere. È come lavorare sul fissaggio di un tavolo pensando che si regge su 3 gambe quando infatti ce ne sono 4. La 4 ° tappa non è visibile quando ci stai lavorando.
Il design per i test significa che hai creato una raccolta di classi, interfacce e altre cose che rimarranno stabili man mano che la modifichi. Non ci dovrebbe essere un enorme effetto a catena quando si interrompe qualcosa (può esserci una causa a catena per dipendenza, ma il fallimento dovrebbe essere orizzontale. Non verticale).
Un utente di una classe vuole affidabilitàfirst. I test di unità dovrebbero mostrare che la classe è stabile in tutti gli stati possibili. È possibile rendere pubblico ogni metodo e ottenere una copertura del codice al 100%. Questo lo rende davvero più affidabile? No, non lo è.
Pensa innanzitutto, quali test unitari devo verificare per verificare che questa roba funzioni come previsto.
Avere un metodo privato double_price()
non significa che debba essere testato. Probabilmente è chiamato poche decine di volte da diverse parti della classe. Raddoppia il prezzo, e ciò accade in molti posti, quindi è reused
code.
Questo metodo rischia la stabilità? Se lo fa, chiediti "Il rischio giustifica una serie diversa di test unitari?" Se è così, incapsula e scrivi i test unitari per quello.
Pensa a questo.
Per costruire un sistema, vuoi utilizzare piccoli pezzi che sai funzionare. Se prendi pezzi A
e B
che conosci superare i test unitari, quindi crea C
usando A
e B
rende C
più stabile.
Non pensare come questo
Ho un sistema chiamato A
. È stabile? Non lo so. Apriamo A
e strappiamo B
e C
. Ora posso testare A
, B
e C
.
Perché è così male? Perché questo può accadere. A
e C
superano i test unit ma B
fallisce. In che modo A
e C
possono essere stabili? Perché non hai strappato A
a parte correttamente. A
è effettivamente instabile perché una parte di essa è che pretende di essere B
.
oh uomo, penso di essermi appena fatto un mal di testa.