È possibile accedere a un campo privato in un test di unità?Test di un campo privato utilizzando MSTest
risposta
Il modo per ottenere campi o metodi privati, in generale, è quello di utilizzare Reflection. Tuttavia, il framework di test unitario include una classe helper, PrivateObject
, per semplificare la procedura. Vedi lo docs. In generale, quando ho usato questo, ho finito per fare un metodi di estensione come la seguente:
public static int GetPrivateField(this MyObject obj)
{
PrivateObject po = new PrivateObject(obj);
return (int)po.GetField("_privateIntField");
}
Se avete bisogno di ottenere campi privati in una classe statica, tuttavia, sarà necessario andare con riflesso diretto.
No. Se si stanno scrivendo buoni Test unità, non è necessario accedere ai campi privati. I test delle unità dovrebbero verificare che quando vengono passati in un gruppo noto di valori, un metodo si comporta in un certo modo (restituendo i dati appropriati o utilizzando le dipendenze in modo noto).
Se si sta provando a eseguire il test successivo, utilizzare Iniezione delle dipendenze per iniettare le dipendenze nella classe che si sta testando. Avrai pieno accesso a tali dipendenze per i tuoi test.
Grazie ragazzi, non mi ero reso conto che stavo violando i principi del TDD. Grazie – Michelle
La domanda era se fosse possibile, non se fosse una buona pratica. – stuartd
Mentre sono d'accordo con Justin in teoria, nella pratica si devono spesso scrivere test unitari per codice sub-ottimale che non può essere modificato o che non può essere facilmente modificato. – Dave
Non dicendo che sia una buona idea, ma ho visto InternalsVisibleTo utilizzato.
Guardate questo D. Una delle risposte più impopolare:
- 1. Iniezione @ Campo privato autorizzato durante il test
- 2. Test Metodo privato utilizzando Mockito
- 3. MSTest Non trova nuovi test
- 4. Mock un campo statico privato con JMockit?
- 5. Come eseguire un test singolo da MSTEST
- 6. Come ottenere TeamCity per eseguire test utilizzando MSTest?
- 7. SonarQube Test Coverage con MsTest
- 8. Timeout a livello di programmazione di un test in MSTest
- 9. valore Set di campo privato
- 10. MSTest - unit test con StackOverflowException
- 11. Test multipliInizializza attributi in MSTEST
- 12. Metodo di inizializzazione test globale per MSTest
- 13. MSTest: come aumentare il tempo di test
- 14. Come scrivere a Console.Out durante l'esecuzione di un test MSTest
- 15. Allegare un'immagine a un rapporto di test in MSTest
- 16. Mockito: inizializzazione del campo privato fittizio
- 17. verifica l'output nel test dell'unità MSTest
- 18. Valore impostato del campo statico privato
- 19. Una proprietà astratta crea un campo di supporto privato?
- 20. I dati di Facebook Post hanno un campo privato vuoto
- 21. Test di Erlang (non esportato/privato) funzione del modulo utilizzando test comune
- 22. Come smettere di eseguire test MsTest al primo errore?
- 23. Il valore del campo privato di Struct non viene aggiornato utilizzando un metodo asincrono
- 24. MSTest: Test unitario - File di input non trovato ... vsmdi
- 25. Metodo di test unitario privato - obiettivo C
- 26. utilizzando Gelsomini spyon su di un metodo privato
- 27. Esecuzione di MSTest UnitTests utilizzando uno script MSBuild
- 28. MSTest & AppDomains
- 29. Problemi con test basati sui dati in MSTest
- 30. Errori di esecuzione test con MSTest in VS2010
Grazie @ mike l'ho provato e funziona bene. – Michelle
@Michelle Prego. –
È possibile ottenere e impostare campi privati in una classe statica utilizzando un oggetto ['PrivateType'] (http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privatetype.aspx) (al contrario del tipo PrivateObject!) – stuartd