come scrivere test di unità per classi interne ???testare una classe interna
risposta
Si scrivono test che specificano il comportamento dell'interfaccia esterna della classe principale. Se quella classe usa le classi interne per implementare quel comportamento o meno, è un dettaglio di implementazione della classe, ei test non hanno bisogno di sapere nulla a riguardo.
Se la classe interna non può essere adeguatamente testata tramite l'interfaccia di classe di livello superiore, di solito è meglio spostare la classe interna e verificarla direttamente come una nuova classe di livello superiore. Volendo testare le classi interne è un odore di codice che la classe interna potrebbe essere abbastanza significativa da essere una classe di alto livello.
Quando si utilizza MS Visual Studio per i test delle unità, è sufficiente creare uno private Accessor. Internamente funziona con riflessioni che penso. Basta dare un'occhiata al codice generato.
Non testarlo direttamente. Sarà testato attraverso la classe in cui è definito.
E, se si applica TDD, come questo tag di domanda attualmente implica, qual è il test che si scrive solo quella chiamata per una classe interiore? Voglio dire, non può essere una classe standard, di proprietà privata della classe a cui stai lavorando?
Abbiamo utilizzato una classe helper che utilizza reflection per caricare e chiamare metodi su classi interne. E 'anche possibile cambiare l'accessibilità al momento della compilazione usando il simbolo DEBUG esempio
#if DEBUG
public
#else
internal
#endif
class MyInternalClass
{
...
}
Tuttavia la risposta di Esko Luontola è più corretta in quanto è i requisiti di funzionalità o di business, che sono più importanti. È facile concentrarsi troppo sulla copertura del codice piuttosto che testare le aree di rischio importanti.
Non che lo consiglierei, ma è anche possibile utilizzare lo InternalsVisibleToAttribute.
Vedi le spiegazioni dettagliate da http://msdn.microsoft.com/en-us/library/bb385974.aspx
La pagina collegata non è più disponibile – Catch22
dici che non consiglio questo, ma come è possibile a risolvere qualcosa di simile? http://stackoverflow.com/questions/15440935/how-to-test-internal-class-library –
@Thomas: esattamente come afferma Esko nella sua risposta. O testate le API interne indirettamente tramite la vostra interfaccia pubblica, oppure promuovete le vostre API interne per pubblicarle e testarle direttamente. –