ClassInitialize
viene chiamato una volta da MSTest prima che venga invocato uno qualsiasi dei numeri TestMethod
, vedere osservazioni here. TestInitialize
viene chiamato una volta prima di ogni metodo di prova. MSTest crea una nuova istanza della classe di test per ciascuna chiamata TestMethod
. Questo è il motivo per cui ClassInitialize
è un metodo statico.
Ho bisogno di eseguire un metodo (non statico) sulla classe. Devo anche eseguire tutti i metodi di test all'interno della stessa istanza della classe.
Vuoi dire è necessario eseguire un metodo sulla TestClass
o la classe in prova (la classe in realtà si sta testando)?
In entrambi i casi, è possibile avere un membro statico nel TestClass
e inizializzarlo una volta in ClassInitialize
. Sarà creato solo una volta ed esiste per tutta la durata dei test. Puoi invocare un metodo solo una volta. È quindi possibile utilizzare questa singola istanza in ciascuno dei metodi di test.
Una cosa di cui essere a conoscenza è che MSTest può intercalare test di classi diverse. Pertanto, se si dispone di uno stato mutabile globale a cui si accede da più di uno ClassInitialize
(o test del caso), potrebbero verificarsi situazioni imprevedibili. Per questo motivo, la statica è meglio evitare.
Il requisito che tutti i metodi devono essere eseguiti sulla stessa istanza è piuttosto insolito. Forse c'è un modo per rifattorizzare il codice per eliminare questo vincolo?
fonte
2012-07-19 22:55:33
un motivo per cui non puoi chiamarne uno, quindi chiamare l'altro? – Wug
Tutto in un solo test? Potrei farlo, ma perderei immediatamente la visibilità su quali test fallirono. Un test chiamato "AllTests"? –