2009-06-29 11 views
3

Als Teil von einigen build automation of running xUnit.net tests with MSBuild, renne ich in einen Fall, wo ich eine Charge von Elementen durchlaufen müssen.Überfüllungsfehlerstatus in MSBuild

Innerhalb der Schleife muss ich erkennen, ob eine Iteration fehlgeschlagen ist, aber Ich möchte trotzdem weiter ausführen. Dann muss ich nach dem Batch-Bit wissen, ob ein oder mehrere Fehler aufgetreten sind, um das Ergebnis an TeamBuild zu melden.

IOW, in Pseudo-Code:

Task Name=RunTests 
    CreateItems 
    ForEach item CallTarget Target=RunTest ContinueOnError=true 
    CombineNUnitResults 
    Report success/failure 

Task Name=RunTest 
    XUnit item 

Ich hoffe, dies ohne eine individuelle Aufgabe erreicht werden kann (oder Hacking die xunit.net MSBuild Aufgabe als Jonne tat). (Aber bereit, MSBuild Community oder Sdc Aufgaben zu verwenden)

Und @BradWilson: Ich dies ist nicht möglich, sauber zu tun, werde ich für Jonne Änderung a la NUnit Aufgabe suchen, um es auch in die Xunit Aufgabe

Siehe auch: How do I get Team Build to show test results and coverage for xUnit.net test suite?

Antwort

6

Dies ist, was wir tun:

<NUnit Assemblies="@(TestAssemblies)" 
    ToolPath="$(NUnitPath)" 
    WorkingDirectory="%(TestAssemblies.RootDir)%(TestAssemblies.Directory)" 
    OutputXmlFile="@(TestAssemblies->'%(FullPath).$(NUnitFile)')" 
    Condition="'@(TestAssemblies)' != ''" 
    ExcludeCategory="$(ExcludeNUnitCategories)" 
    ContinueOnError="true"> 
    <Output TaskParameter="ExitCode" ItemName="NUnitExitCodes"/> 
</NUnit> 

<Error Text="Test error(s) occured" Code="%(NUnitExitCodes.Identity)" Condition=" '%(NUnitExitCodes.Identity)' != '0' And '@(TestAssemblies)' != ''"/> 

Dies ungeachtet des Scheiterns alle Unit-Tests laufen wird, aber fehlschlagen, nachdem alle irgendwelche Fehler waren, wenn es ausgeführt wurden. Hinweis ContinueOnError="true" stellt sicher, dass sie alle ausgeführt werden und der Fehler am Ende überprüft, ob einer von ihnen fehlgeschlagen ist (in Nunit 0 zeigt Erfolg, alles andere ist ein Fehler).

Hinweis: Dies verwendet die NUnit-Task MSBuildCommunityTasks, aber wenn Sie nur Exec mit der Nunit-Exe verwenden, können Sie den gleichen Effekt erhalten. Die Ausgabe "ExitCode" ist allen Tasks gemeinsam, die von ToolTask ​​erben.

+0

Hallo Mike, danke, dass du dir die Zeit genommen hast zu antworten. Aus meiner Sicht ist ExitCode eine benutzerdefinierte NUnit-Task-Eigenschaft, die nicht in der xUnit-Task implementiert ist. (Die NUnit-Task benötigt auch mehrere Assemblies (xUnit doesnt, weshalb ihr Parameter Assembly heißt und es gibt eine Diskussion über die xUnit-Codeplex-Diskussionen). Jetzt habe ich das Note-Bit gelesen, ich sehe, dass ich mehr Forschung betreiben muss. Lösche diesen Kommentar und ersetze ihn durch etwas sinnvolleres, wenn ich das tue (ich hatte gedacht, dass der ExitCode nur auf NUnit und Exec war). Gute Arbeit Ich habe das MSPress Buch auf dem Weg! –

+0

Ah - sehr guter Punkt, der xunit-Task wird nicht von ToolTask ​​abgeleitet, also erzeugt man ein [Problem auf der Codeplex-Site, das es anfordert] (http://xunit.codeplex.com/WorkItem/View.aspx?WorkItemId=7954). Wenn das erledigt ist, muss ich nur ein paar saubere MSBuild Sachen machen, um über die Assembly Liste zu iterieren und die XMLs zusammenzufügen –

+0

+1 - Ich hatte ein ähnliches Problem und, während diese Antwort es nicht direkt löste, führte es mich hinein die richtige Richtung –