2012-11-21 14 views
5

OBIETTIVO:La proprietà TestContext.TestName cambia MAI

voglio usare la proprietà TestContext.TestName per estrarre il nome del test essere corse in modo che la mia funzione [TestCleanup] può accedere il risultato al nostro su misura repository dei risultati, automaticamente al termine di ogni test.

PROBLEMA:

Anche nella mia base 'sanità mentale controllare' progetto di test che contiene 5 test che sono simili alla struttura di seguito:

[TestMethod] 
public void TestMethodX() 
{ 
    Console.WriteLine(String.Format("In Test '{0}'",_ctx.TestName)); 
    Assert.IsTrue(true); 
} 

Con un 'inizializzatore' Classe come di sotto del quale set _ctx per me:

[ClassInitialize] 
public static void ClassInit(TestContext Context) 
{ 
    _ctx = Context; 
    Console.WriteLine("In ClassInit()"); 
} 

[[NOTA: i Console.WriteLines sono puramente lì per me a Hove r il mouse sopra e controlla valore/proprietà, ecc.]]

Il _ctx.TestName non cambia MAI dal nome del primo test nell'esecuzione dei test, cioè Se dovessi eseguire tutti e cinque i test ('TestMethod1', "TestMethod2", "TestMethod3", ecc.) Registrano tutti "TestMethod1" come loro testname nel mio repository dei risultati. Eseguire i test individualmente funziona, ma non serve a me perché devo essere in grado di eseguire 10/100/1000 di test contro la mia applicazione e fare in modo che testContext gestisca me o il nome del test.

Ho provato diverse volte questo problema e ho cercato su Internet e non ho nessun altro con questo problema, quindi sono entrambi: unico con questo problema, ha scarsa conoscenza di Google-Fu, o sto facendo qualcosa Davvero stupido. Spero che questo abbia un senso e qualcuno ha la risposta.

Grazie in anticipo,

Andy

risposta

7

questo sta accadendo perché il [ClassInitialize] viene eseguito solo una volta per tutta la corsa di prova e si inizializzare lo qui. Utilizzare il [TestInitialize] invece, che viene eseguito prima di ogni metodo di prova e ignorare il TestContext Class:

[TestClass] 
public class TestClass 
{ 
    public TestContext TestContext { get; set; } 

    [TestInitialize] 
    public void Initialize() 
    { 
     // Runs once before each test method and logs the method's name 
     Console.WriteLine(TestContext.TestName); 
    } 

    [TestMethod] 
    public void TestMethod1() 
    { 
     // Logs the method name inside the method 
     Console.WriteLine(String.Format("In Test '{0}'", TestContext.TestName)); 
    } 

    // ... Your rest test methods here 
} 
+1

Grazie per questo! ha funzionato perfettamente !! :) – Robbo

+0

Sei il benvenuto. – Schaliasos

+0

Ho avuto un problema simile, quindi ho semplicemente cambiato 'ClassInitialize' in' TestInitialize' prendendo il contesto come parametro. Compila ma il test dice che il metodo 'TestInitialize' sta usando una firma errata (non può accettare un parametro). Perché sulla Terra il 'ClassInitialize' prenderà un contesto se si suppone che sia destinato a testare il metodo e non l'intera classe? Perché il 'TestInitialize' non accetta un contesto? Se 'ClassInitialize' prende un' TestContext' come parametro, come possiamo indovinare che dobbiamo aggiungere una proprietà? Incredibilmente non intuitivo. – fernacolo

-1

uscite MSTest.exe possono essere configurate per produrre un .trx (xml) file con i risultati completi di voi testare, nomi, superato o meno e l'output da qualsiasi di quelli di prova, v'è anche uno strumento per convertire il file in formato HTML TRX http://trxtohtml.codeplex.com/

Spero che questo aiuti

Problemi correlati