2009-06-10 14 views

risposta

4

Generalmente no. Se esegui un test completo dei metodi pubblici che utilizzano utilizzando i metodi privati ​​e le classi interne, dovresti essere in grado di testare l'intera gamma delle funzionalità private senza esporle.

0

È necessario esporre un mezzo per richiamarli, possibilmente attraverso una classe derivata specifica per il test.

30

metodi private:

Se stai cercando di testare i metodi non pubblici, di solito significa che stai facendo male.

Se esistono funzionalità che si desidera testare, ma non si desidera rendere pubbliche sulla classe, il codice sta cercando di dirti qualcosa. La tua classe ha probabilmente troppe responsabilità. Dovresti prendere seriamente in considerazione l'idea di estrarre tale funzionalità privata in una nuova classe, scrivere test per la nuova classe e far sì che la tua vecchia classe abbia un'istanza privata della nuova classe.

classi interne:

questo è più valida, soprattutto se si sta scrivendo una libreria di classi per gli altri da riutilizzare. Potresti avere classi non progettate per uso generale, ma per le quali vuoi scrivere test unitari.

Per questo caso, dare un'occhiata a InternalsVisibleToAttribute.

+3

Vale anche la pena notare che InternalsVisibleTo può essere utilizzato per esporre costruttori/metodi utilizzati solo dal gruppo di test e mantenere quelli nascosti dal codice client. – jlafay

2

Il modo in cui gestisco questo è che pubblico tutti i miei metodi. So che suona male, ma sopportami un momento.

Quando si utilizza IoC si dispone di un'interfaccia per ogni classe che ha una logica in esso. Quindi in pratica si codifica contro l'interfaccia e non l'effettiva implementazione. Ciò che facciamo è contrassegnare tutti i metodi pubblici e non influisce sul modo in cui la classe viene utilizzata, tranne che rende possibile scrivere test unitari per ogni metodo in quella classe.

Problemi correlati