2014-02-15 3 views
5

Ich verschiebe meine Projekte von NUnit zu XUnit Test Framework. Wir führen Tests in TeamCity über MSBuild Task aus. Ich möchte Tests nach Kategorien ausschließen. In NUnit und Teamcity ist das einfach.Führen Sie Tests basierend auf XUnit nach Eigenschaften gefiltert in Teamcity

Wie würde ich in xUnit darüber gehen?

Msbuild Ziel sieht wie folgt aus:

<Target Name="xUnitTests"> 
    <xunit Assembly="$(SolutionDir)\Tests\bin\Debug\MyApp.Tests.exe" /> 
    </Target> 

Im Idealfall würde ich Exclude="Category=database" als Attribut <xunit> Element hinzufügen möchten, aber dies ist nicht gültig.

Ich sah schnell durch xUnit-Quellcode und fand diese Option für Msbuild Runner nicht.

Gibt es noch weitere Alternativen, Tests nach Merkmalen in msbuild runner zu ignorieren?

Antwort

2

Verwenden Sie die TraitAttribute in den Tests, eine Exec Aufgabe in der Msbuild-Datei und der xunit.console.clr4.exe-Läufer mit dem /-trait "Category=database" Argument.

Eine Alternative besteht nicht darin, msbuild zu verwenden, sondern stattdessen einen zusätzlichen Schritt in TeamCity zu erstellen, in dem Sie die xunit-Konsole direkt ausführen. Sie können die Assemblys in einer xunit-Projektdatei angeben. Dies ist die Lösung, die ich bei TeamCity und XUnit.net eingesetzt habe. Ich habe die xunit-Projektdatei in meinem Ordner mit den Lösungselementen gespeichert und die Testassemblys manuell hinzugefügt.

+0

Hinweis, in xunit Konsole Läufer 2 oder höher, ist der Ausschluß von Zug-Schaltern nun '-notrait', wie im Folgenden der Überspringt Tests mit der Kategorie Datenbank: 'xunit.console.exe Pfad \ zu \ meintest.dll -notrait" Kategorie = Datenbank "' – NYCdotNet

5

Ich werde nur die Josh Gallagher Antwort ein wenig mit einfachen Beispiel erweitern, wie ich es mache. Unter der Annahme, dass Sie die folgenden Tests haben:

[Fact] 
[Trait("Category", "Integration")] 
public async Task Test_for_long_running_operation() 
{ 
    var someClass = new SomeClass(); 
    int result = await someClass.LongRunningOperationAsync() 
    Assert.Equal(5, result); 
} 

[Fact] 
[Trait("Category", "Unit")] 
public void Test_for_quick_operation() 
{ 
    var someClass = new SomeClass(); 
    int result = someClass.GetSomeNumber() 
    Assert.Equal(3, result); 
} 

könnten Sie die folgenden in Ihrem msbuild Zieldatei haben:

<Target Name="xUnitTests"> 
    <!-- For debug builds: skipping long integration tests --> 
    <xunit Condition="'$(Configuration)' == 'Debug'" 
      ExcludeTraits="Category=Integration" 
      Assembly="$(SolutionDir)\Tests\bin\Debug\MyApp.Tests.exe" /> 

    <!-- For release builds: run them all --> 
    <xunit Condition="'$(Configuration)' == 'Release'" 
      Assembly="$(SolutionDir)\Tests\bin\Debug\MyApp.Tests.exe" /> 
</Target> 
+0

Zum Zeitpunkt der Frage war dies nicht verfügbar - genau das wurde versucht und Fehler über ungültig XML wurde geworfen. – trailmax

+0

@trailmax, oh ich verstehe. Nun, gute Sache ist jetzt, es funktioniert ganz gut für mich, also können sie dies richtig behoben (oder umgesetzt) ​​werden. – Sevenate

+0

Gut, es funktioniert jetzt. Ich werde es in einem nächsten Projekt versuchen. – trailmax

1

Obwohl auf MSBuild basiert nicht und wie Josh erwähnt, ich habe eine xunit + dotCover erstellt Meta-Runner, der das Einschließen und Ausschließen von Xunit-Merkmalen, Filtern und Wildcard-Auswahlen unterstützt. Dies bedeutet, dass Sie Build-Schritte erstellen können, die auf bestimmte Testgruppen abzielen. Sie können auch die Teile für den Dotcover ausschließen, wenn Sie nur den Testläufer-Teil benötigen.

Sie können die Details und die Quelle in meinem Beitrag finden:

http://www.wwwlicious.com/2015/09/25/teamcity-dotcover-xunit-at-last/

+0

Kühl. Ich werde es bei dem nächsten Projekt, das ich mit XUnit mache, eine Bash geben – trailmax

Verwandte Themen