2015-09-15 10 views
8

Sto utilizzando NUnit 3.0 e TestFixtureSource per eseguire test case all'interno di un'attrezzatura più volte con diversi parametri/configurazioni (desidero farlo al livello TestFixture). Semplice esempio:Nunit3 come modificare il nome del banco di prova in base ai parametri passati da TestFixtureSource

[TestFixtureSource(typeof (ConfigurationProvider))] 
public class Fixture 
{ 
    public Fixture(Configuration configuration) 
    { 
     _configuration = configuration; 
    } 

    private Configuration _configuration; 

    [Test] 
    public void Test() 
    { 
     //do something with _configuration 
     Assert.Fail(); 
    } 
} 

Diciamo che Test() non riesce per una delle configurazioni e succede con un'altra. Nel file di report di esecuzione e in Test Explorer di Visual Studio, il nome per entrambe le corse non riuscite e quelle riuscite verrà visualizzato come Test(), che non mi dice nulla su quale installazione ha causato problemi.

C'è un modo per influenzare i nomi dei casi di test in questa situazione (ad esempio prefisso il suo nome per l'esecuzione/configurazione dell'installazione)? Come soluzione temporanea, sto attualmente stampando l'output dei risultati prima che ogni caso di test si attivi, ma preferirei evitare di farlo.

Dal momento che NUnit 3.0 è in versione beta e questa funzionalità è abbastanza recente non sono riuscito a trovare nulla nei documenti. Ho trovato TestCaseData ma non penso che sia ancora tagliato su misura per essere usato con i proiettori (è progettato per i casi di test).

risposta

2

Non riesco a trovare un modo per modificare il testname, ma non dovrebbe essere necessario, perché NUnit3 costruisce il testname includendo una descrizione del testfixture.

L'esempio di classe Fixture dalla questione può essere utilizzato invariato se la Configuration e ConfigurationProvider ha un'implementazione del genere:

public class Configuration 
{ 
    public string Description { get; } 

    public Configuration(string description) 
    { 
     Description = description; 
    } 

    public override string ToString() 
    { 
     return Description; 
    } 
} 

public class ConfigurationProvider : IEnumerable 
{ 
    public IEnumerator GetEnumerator() 
    { 
     yield return new Configuration("Foo"); 
     yield return new Configuration("Bar"); 
     yield return new Configuration("Baz"); 
    } 
} 

Il 'trucco' è quello di assicurarsi il costruttore-parametro per l'apparecchio è un stringa o ha un metodo ToString che fornisce una descrizione ragionevole del dispositivo.

Se si utilizza l'adattatore di prova NUnit 3 in Visual Studio, allora i testfixtures saranno visualizzati come Fixture(Foo), Fixture(Bar) e Fixture(Baz) modo da poter facilmente distinguere tra le loro prove. L'xml-output di nunit3-console.exe inoltre usa i nomi descrittivi, fx: fullname=MyTests.Fixture(Bar).Test

<test-case id="0-1003" name="Test" fullname="MyTests.Fixture(Bar).Test" methodname="Test" classname="MyTests.Fixture" runstate="Runnable" result="Failed" ... > 
    <failure> 
     <message><![CDATA[]]></message> 
     <stack-trace><![CDATA[at MyTests.Fixture.Test() in ... ]]></stack-trace> 
    </failure> 
    ... 
</test-case> 

Using NUnit 3 Test Adapter in Visual Studio

0

Un modo per eseguire tali azioni è quello di avere ricerca e sostituzione gettoni nel codice sorgente e dinamicamente compilare le librerie di test prima dell'esecuzione utilizzando la riga di comando msbuild. passaggi di alto livello sono

  1. definire i nomi di test case come sometest_TOKEN in fonte quindi utilizzando strumenti a linea di comando come fnr.exe REPLCE _token con quello che vuoi. Ad esempio sometest_build2145.
  2. Compilare la DLL con msbuild ad esempio msbuild/t: REbuild mytestproj.sln. Successivamente, eseguire tutti i test case in mytestproj.dll.
Problemi correlati