2009-05-12 12 views
7

Ho corrente ottenuto una linea nella parte superiore di tutti i miei test che assomiglia a questo:uscita il nome del test corrente tramite uso del codice a [Impostazioni] metodo

Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod().Name); 

Sembra che sarebbe sii gentile se potessi inserire questo nel mio metodo Init (quello taggato con [Setup]). Ho pensato che avrebbe funzionato, ma non importa quale numero ho inserito per il frame dello stack il più vicino possibile è Init. Non quello che voglio, ma molto vicino:

string methodName = new StackFrame(0).GetMethod().Name; 
Console.WriteLine(methodName); 

penso che questo potrebbe non essere possibile, dato il modo in cui Nunit esegue test.

Perché fai questo, dici? Perché nell'output della mia console sarebbe bello vedere dove è iniziato un nuovo test, quindi se entrambi colpiscono lo stesso codice e generano valori diversi, saprò quale ha fatto cosa, senza dover eseguire il debug.

+0

La risposta da @Miwil è una soluzione molto migliore - vuoi considerare di cambiare la risposta accettata? – skolima

+0

@skolima sicuro, se ottiene più uptotes rispetto alla risposta accettata – jcollum

risposta

6

TestCaseAttribute non è stato aggiunto fino a NUnit 2.5, che potrebbe essere il motivo per cui non è possibile trovarlo. Ma non sarebbe d'aiuto comunque - sfortunatamente, il metodo SetUp viene chiamato prima del metodo di test, non dal contesto del metodo di test (quindi non verrà visualizzato nello stack di chiamate).

Fortunatamente, NUnit supporta già quello che stai cercando di fare! Dalla GUI, vai su Strumenti> Opzioni> GUI> Generali> Output testo e seleziona "Mostra etichette TestCase". Oppure, per il corridore della console, è sufficiente aggiungere /labels ai parametri.

0

È possibile utilizzare NUnit.Core.NUnitFramework.TestCaseAttribute per ottenere il nome del test corrente.

+0

beh il primo problema è che non esiste. Il più vicino che ho trovato è stato 'NUnit.Core.NUnitFramework.TestAttribute' che ha restituito un valore di' "NUnit.Framework.TestAttribute" '. – jcollum

13

Di seguito mi potrebbe aiutare:

string testName = NUnit.Framework.TestContext.CurrentContext.Test.Name; 
string testFullName = NUnit.Framework.TestContext.CurrentContext.Test.FullName; 
1

Ecco la VB che uso per accedere ogni test in un file:

<SetUp()> 
Public Sub Setup() 
    Logging.logTest(NUnit.Framework.TestContext.CurrentContext.Test.Name) 
End Sub 
Problemi correlati