Tfs 用于组合NUnit或MSTest XML结果的MSBuild任务

Tfs 用于组合NUnit或MSTest XML结果的MSBuild任务,tfs,msbuild,nunit,tfsbuild,xunit.net,Tfs,Msbuild,Nunit,Tfsbuild,Xunit.net,我有一组NUnit XML结果文件(由xUnit.NET通过xUnit.Runner.MSBuild.xUnit MSBuild任务的NUnitXml参数生成,类似于和中的) 脚本单独发布每个测试运行,这很慢,因为它每次都会拉入所有测试结果工件。因此,我希望在提交[使用带有/publish参数的mstest.exe提交到TFS]之前,首先在客户端将它们合并为一个统一的集合 xUnit.net有一个CombineXunitXml任务,该任务在xUnit.tests.msbuild中调用,如下所示:

我有一组NUnit XML结果文件(由xUnit.NET通过xUnit.Runner.MSBuild.xUnit MSBuild任务的NUnitXml参数生成,类似于和中的)

脚本单独发布每个测试运行,这很慢,因为它每次都会拉入所有测试结果工件。因此,我希望在提交[使用带有/publish参数的mstest.exe提交到TFS]之前,首先在客户端将它们合并为一个统一的集合

xUnit.net有一个CombineXunitXml任务,该任务在xUnit.tests.msbuild中调用,如下所示:-

<CombineXunitXml InputFiles="@(TestXmlFiles)" OutputFile="TestResults.xml" />


有人知道以类似方式合并NUnit结果文件的等效任务吗?(我猜这不会像NUnit任务在其assemblies参数中使用多个程序集那样常见,而xUnit.net有一个单一的程序集参数)。

xUnit 1.1中不存在CombineCUnitXML任务。将1.5版本的源代码(当前为CTP2)中的类复制到1.1版本的解决方案中,它对我来说构建得很好。

我尝试时无法让Davy Brion的构建任务正常工作(Atanas Korchev回答中的链接)

所以我们写了一个开源的替代品:

自述文件:

在MSBuild中使用 加载任务:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
             ToolsVersion="4.0"
             DefaultTargets="Build">
  <UsingTask AssemblyFile="$(MSBuildProjectDirectory)\..\Tools\MSBuild\15below.NUnitMerger.dll" TaskName="FifteenBelow.NUnitMerger.MSBuild.NUnitMergeTask" />
  ...

嗨,很高兴听到它为你工作。FWIW,我一直在寻找(并且得到了,再次感谢Atans!)一项组合NUnit XML的任务——组合xUnit XML只是构建xUnit本身时通常感兴趣的事情(有一个XSLT可以从NUnit XML转换为MSTEST)。我很想听听你在编造什么(当你得了50分时,作为一个评论!)这里有10个给你送去你的方式。。。顺便说一句,CodePlex上的xUnit.net论坛也很值得提问。谢谢。我真的应该在我的回答中给出更多的背景。我是在寻找获取CruiseControl构建结果中显示的多个测试程序集的xUnit结果的方法时发现这篇文章的。单组件版本在codeplex上的xUnit站点上有介绍。好的,很抱歉在我的回复中有任何光顾noob治疗的迹象!(我给你留下+1 tho:D)
  <Target Name="UnitTest" DependsOnTargets="OtherThings">
    ... Generate the individual files here in $(TestResultsDir) ...

    <ItemGroup>
      <ResultsFiles Include="$(TestResultsDir)\*.xml" />
    </ItemGroup> 

    <NUnitMergeTask FilesToBeMerged="@(ResultsFiles)" OutputPath="$(MSBuildProjectDirectory)\TestResult.xml" />
  </Target>
open FifteenBelow.NUnitMerger.Core
open System.IO
open System.Xml.Linq

// All my files are in one directory
WriteMergedNunitResults (@"..\testdir", "*.xml", "myMergedResults.xml")

// I want files from all over the place
let myFiles = ... some filenames as a Seq

myFiles
|> Seq.map (fun fileName -> XDocument.Parse(File.ReadAllText(fileName)))
|> FoldDocs
|> CreateMerged
|> fun x -> File.WriteAllText("myOtherMergedResults.xml", x.ToString())