2

我有一组 NUnit XML 结果文件(由 xUnit.NET 通过 Xunit.Runner.MSBuild.xunit msbuild 任务的 NUnitXml 参数生成,就像我如何让 Team Build 显示 xUnit.net 的测试结果和覆盖率中一样测试套件?http://jonnekats.wordpress.com/2009/05/07/integrate-xunit-tests-into-your-daily-team-build/

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

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

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

有谁知道以类似方式合并 NUnit 结果文件的等效任务?(我猜这不会像 NUnit 任务在其 Assemblies 参数中采用多个程序集而 xUnit.net 具有单个 Assembly 参数那样普遍)。

4

2 回答 2

2

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

于 2009-07-30T20:03:36.617 回答
1

当我尝试时,我无法让 Davy Brion 的构建任务工作(Atanas Korchev 的答案中的链接)。

所以我们写了一个开源替换:

https://github.com/15below/NUnitMerger

从自述文件:

在 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" />
  ...

在目标中为其提供一组文件:

  <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>

在 OutputPath 中查找生成的组合结果。

在 F# 中使用

创建一个 F# 控制台应用程序并添加 15below.NUnitMerger.dll、System.Xml 和 System.Xml.Linq 作为引用。

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())
于 2012-06-26T08:30:12.917 回答