2009-06-29 3 views
3

Как часть некоторого build automation of running xUnit.net tests with MSBuild, я столкнулся с ситуацией, когда мне нужно перебрать партию элементов.Ошибка при обнаружении ошибки в MSBuild

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

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

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

Task Name=RunTest 
    XUnit item 

Я надеюсь, что это может быть достигнуто без пользовательской задачи (или взлома xUnit.NET MSBuild задачу сделала Йонну). (Но готов использовать задачи MSBuild сообщества или SDC)

И @BradWilson: Я это разве можно делать чисто, я буду искать изменения Йонны в а-ля задачи NUnit также сделать его в XUnit задачу

Смотрите также: How do I get Team Build to show test results and coverage for xUnit.net test suite?

ответ

6

Это то, что мы делаем:

<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 указывает на успех, что-то еще является сбой).

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

+0

Привет Майк, спасибо, что нашли время, чтобы ответить. Из моего чтения ExitCode является настраиваемым свойством задачи NUnit, которое не реализовано в задаче xUnit. (Задача NUnit также принимает несколько сборок (xUnit doesnt, поэтому ее параметр называется Assembly и обсуждается xUnit codeplex Обсуждения). Теперь я прочитал бит Note, я вижу, что мне нужно сделать больше исследований. Удалит этот комментарий и заменит его чем-то более разумным, когда я это сделаю (я думал, что ExitCode был только на NUnit и Exec). Хорошая работа У меня есть книга MSPress на пути! –

+0

Ah - очень хорошая точка, задача xunit не выводится из ToolTask, поэтому создается [проблема на сайте codeplex, запрашивающая ее] (http://xunit.codeplex.com/WorkItem/View.aspx?WorkItemId=7954). Когда это будет сделано, мне просто нужно сделать некоторые чистые вещи MSBuild для перебора списка сборок и слияния XML. –

+0

+1 - У меня была аналогичная проблема, и хотя этот ответ не решал ее напрямую, это привело меня к в правильном направлении –