2010-08-27 15 views
31

Esiste qualche stato globale da cui posso accedere al nome del test attualmente in esecuzione?Come accedere al nome del test NUnit a livello di programmazione?

Ho dei test che restituiscono i file in una directory e li rileggo. Mi piacerebbe che ogni test crei una directory in cui giocare e poi ripulisca dopo se stessa, e non voglio spingere quel nome in (Dovrei renderlo unico, quindi assicurarmi che ogni test lo mantenga unico, ew). Potrei usare un GUID, ma mi piacerebbe che i metodi di supporto fossero in grado di assumere "questo è il posto dove i file di test dovrebbero essere memorizzati" senza dover spingere quel GUID intorno a loro. Ancora una volta, questa trivella per uno stato globale da qualche parte.

Fondamentalmente, voglio una chiamata come TestRunner.Current.CurrentTest.Name. Esiste una cosa del genere?

risposta

22

non ho aggiornato a 2.5.7 ancora me stesso, ma include una classe TestContext che sembra fornire proprio quello che stai cercando: http://www.nunit.org/index.php?p=releaseNotes&r=2.5.7

+0

Funziona alla grande. Uso un Regex per eliminare tutti i caratteri che non funzionano nel nome di una directory, e va tutto bene. Grazie! – TALlama

+0

Per utilizzarlo nel codice, ottenere il TestContext chiamando il metodo CurrentContext statico. Quindi, ad esempio: TestContext.CurrentContext.Test.Name –

4

Assumendo un metodo per Test, nel codice NUnit, è possibile utilizzare il reflection per ottenere il nome del metodo dallo stacktrace.

Se si scrive un metodo di supporto nel codice NUnit chiamato da altri metodi per fare questo file di log, è possibile utilizzare questa sintassi per verificare la metodo precedente:

string MethodName = new StackFrame(1).GetMethod().Name; 

vedere le risposte a question 44153, "Can you use reflection to find the name of the currently executing method?" per ulteriori dettagli.

+0

Questo non gestirà i metodi [TestCase] ​​che sono chiamati più volte, ma è abbastanza vicino da farti il ​​rappresentante. – TALlama

25

(Supponendo C#)

NUnit.Framework.TestContext.CurrentContext.Test.Name 

oppure

NUnit.Framework.TestContext.CurrentContext.Test.FullName 
+0

Questo è stato originariamente suggerito per utilizzare this.GetType(). ToString() Se eri pigro; tuttavia ciò non funziona per i test di TestCaseSource, è necessario utilizzare uno dei due overload da TestContext per funzionare in tutti gli scenari. – aolszowka

Problemi correlati