在使用MSBuild和TeamCity时运行XUnit测试

3
我将尝试在构建过程中让TeamCity运行XUnit测试。因此,我创建了一个单独的文件 - MyProject.msbuild - 位于与.sln文件相同的文件夹中,其内容如下:
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <UsingTask AssemblyFile="$(MSBuildProjectDirectory)\..\bin\xunit.net\xunit.runner.msbuild.dll" TaskName="Xunit.Runner.MSBuild.xunit"
             />

    <Target Name="Build">
      <MSBuild Projects="MyProject.sln" Targets="Build" Properties="Configuration=Release">
        <xunit Assembly="MyProject.Utility.Tests\bin\Release\MyProject.Utility.Tests.dll" />
      </MSBuild>
    </Target>

</Project>

然而,无论我做什么,VS2010都不允许在<head>元素内包含<base>元素。如果我对该文件运行MSBuild,则会告诉我更多信息:

P:\MyProject\src>c:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe MyProject.msbuild /tv:4.0 /v:d
Microsoft (R) Build Engine Version 4.0.30319.1
[Microsoft .NET Framework, Version 4.0.30319.225]
Copyright (C) Microsoft Corporation 2007. All rights reserved.

Build started 08.11.2011 21:08:46.
Project "P:\MyProject\src\MyProject.msbuild" on node 1 (default targets).
Building with tools version "4.0".
P:\MyProject\src\MyProject.msbuild(8,9): error MSB4067: The element <xunit> beneath element <MSBuild> is unrecognized.
Done Building Project "P:\MyProject\src\MyProject.msbuild" (default targets) -- FAILED.


Build FAILED.

"P:\MyProject\src\MyProject.msbuild" (default target) (1) ->
  P:\MyProject\src\MyProject.msbuild(8,9): error MSB4067: The element <xunit> beneath element <MSBuild> is unrecognized.

    0 Warning(s)
    1 Error(s)

Time Elapsed 00:00:00.01

我的猜测是它无法成功加载xunit.runner.msbuild.dll - 或者我做了其他奇怪的事情。

然而,如果它无法加载xunit.runner.msbuild.dll,我认为它会告诉我。我确保文件没有被阻止(通过使用7zip解压缩xunit分发包)。

有什么建议可以让MSBuild接受我的构建文件并运行测试吗?

1个回答

8

您不想嵌套调用,请尝试以下方法:

<Target Name="Build"> 
    <MSBuild Projects="MyProject.sln" Targets="Build" Properties="Configuration=Release"> 
    </MSBuild> 
    <xunit Assembly="MyProject.Utility.Tests\bin\Release\MyProject.Utility.Tests.dll" /> 
</Target> 

目标中的项按顺序执行。

那真是太简单了,有点尴尬。谢谢! :) - Rune Jacobsen
别担心,顺便说一下,我可能会将测试与构建分开,并为自己设置一个测试目标和一个构建目标(尽管我检查的msbuild示例部分没有这样做!),然后您就可以选择在任何上下文中运行任何目标。 - Murph
谢谢,是的,我可能会朝那个方向去。也许这样做会更容易在TeamCity中实现代码覆盖率。 :) - Rune Jacobsen
我的意图是最终拥有以下目标:类似于构建、单元测试、打包、部署、冒烟测试——目前,我把后面的三个目标合并成了一个(它能正常运行...)。另外,我还需要一个集成测试目标。挑战在于我有很多项目要将所有这些内容都整合起来。 - Murph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接