È importante capire che un singolo metodo potrebbe non essere la tua "unità". Per dare un esempio forzato, se (per qualche motivo) hai creato una classe con metodi pubblici:
Add(object key, object value);
Get(object key);
che ha appena avvolto un dizionario privato, sarebbe inconcepibile testare solo uno di questi metodi alla volta, indipendentemente dall'altro.
Per la situazione esatta che descrivi, tuttavia, potrebbe non essere così chiaro. Sembra piuttosto che essere intrinsecamente dipendenti l'uno dall'altro per la loro funzione come nell'esempio precedente, i tuoi metodi sono collegati solo in quanto uno può essere utile in un test dell'altro.
In questo caso, potrebbe essere utile iniziare con l'idea di duplicare il metodo B esattamente nel codice di test e chiedendo se questa è una violazione di DRY. Ovviamente stai ripetendo il tuo codice, ma come dimostrato da Mathias Verraes , questo non significa sempre una violazione DRY. Un buon modo di pensare a questo è: quando uno di questi metodi cambia, l'altro richiederà sempre lo stesso cambiamento?
È difficile per me giudicare senza conoscere i metodi esatti, ma è abbastanza probabile che tu voglia, ad esempio, che la tua versione di prova di B non esegua alcuna convalida della versione di produzione o simile. In questo caso, avere due versioni potrebbe andare bene.
Ci sono ulteriori compromessi pratici:
-
Se usi il metodo B nel metodo di test A, un bug nel metodo B potrebbe mascherare un bug nel metodo A, o almeno ti impedirà di conoscere il vero risultato del test del metodo A. Questo è simile al motivo per cui le persone in genere cercano di evitare più affermazioni.
-
D'altra parte, se si effettua una versione di prova del metodo B e si consente di variare indipendentemente dalla versione di produzione, la versione di prova non sarà altrettanto testata, il che potrebbe essere un problema se il metodo è sufficientemente complesso o soggetto a modifiche.