Статус ошибки перехвата в MSBuild - PullRequest
3 голосов
/ 29 июня 2009

В рамках некоторой автоматизации сборки при выполнении тестов xUnit.net с MSBuild я столкнулся с ситуацией, когда мне нужно перебрать пакет элементов.

Внутри цикла мне нужно определить, не прошла ли итерация, , но Я хочу продолжить выполнение независимо. Затем после пакетного бита мне нужно знать, произошла ли одна или несколько ошибок, чтобы сообщить результат в TeamBuild.

IOW, в псевдокоде:

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

Task Name=RunTest
   XUnit item

Я надеюсь, что этого можно достичь без специальной задачи (или взлома задачи MSBuild xunit.net, как это сделал Джонн). (Но желающие использовать задачи MSBuild Community или Sdc)

И @BradWilson: если это невозможно сделать чисто, я буду искать изменения Джонна в качестве задачи NUnit, чтобы они также превратились в задачу xunit

См. Также: Как заставить Team Build отображать результаты тестирования и покрытие для набора тестов xUnit.net?

Ответы [ 2 ]

6 голосов
/ 29 июня 2009

Вот что мы делаем:

<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)' != ''"/>

Это запустит все модульные тесты, независимо от сбоя, но не выполнится после того, как все были запущены, если были какие-либо сбои. Примечание ContinueOnError="true" гарантирует, что все они запущены, а Ошибка в конце проверяет, не произошла ли какая-либо из них (в nunit 0 означает успех, все остальное - сбой).

Примечание: это использует задачу MSBuildCommunityTasks NUnit, но если вы просто используете exec с nunit exe, вы можете получить тот же эффект. Выходной «ExitCode» является общим для любой Задачи, которая наследуется от ToolTask.

2 голосов
/ 09 августа 2009

Захватите 1,5 бета. Мы исправили это, введя выходной параметр ExitCode в нашу задачу xunit MSBuild!

http://xunit.codeplex.com/Release/ProjectReleases.aspx

...