MSBuild - 尝试运行xUnit(.net)测试

时间:2011-03-01 21:19:59

标签: msbuild msbuild-task xunit

我正在尝试建立一个C#项目,在构建时运行xUnit测试,所以我可以在持续集成中使用它们。我有一个常规项目,一个使用xUnit的类库测试项目,以及我的测试运行器项目。从我读过的所有内容看来,我应该能够通过在测试运行项目中完成这项工作来实现这一目标:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Test"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  [auto-created project stuff]
  <UsingTask AssemblyFile="xunit.runner.msbuild.dll"
      TaskName="Xunit.Runner.MSBuild.xunit" />
  <Target Name="Test">
    <xunit Assembly="$(MSBuildProjectDirectory)\..\OnePageOneDb.Tests\bin\Debug\OnePageOneDb.Tests.dll" />
  </Target>
</Project>

当我在更改后构建我的解决方案(通常编辑.csproj文件)时,我得到了这个:

  

“Xunit.Runner.MSBuild.xunit”任务   无法从程序集中加载   C:\用户[名为myUsername] \代码\ OnePageOneDb \ OnePageOneDb.TestRunner \ xunit.runner.msbuild.dll。   无法加载文件或程序集   '文件:/// C:\用户[名为myUsername] \代码\ OnePageOneDb \ OnePageOneDb.TestRunner \ xunit.runner.msbuild.dll'   或其中一个依赖项。系统   找不到指定的文件。   确认一下   声明是正确的,即   程序集及其所有依赖项   可用,并且任务包含   实现的公共类   Microsoft.Build.Framework.ITask。

即使我将xunit.runner.msbuild.dll和xunit.runner.utility.dll添加到它引用的位置的项目中,我收到此消息。但如果我再次建立而没有任何变化,我会一直得到这个:

  

找不到“xunit”任务。校验   以下内容:1。)的名称   项目文件中的任务是一样的   作为任务类的名称。 2.)   任务类是“公共的”并实现   Microsoft.Build.Framework.ITask   接口。 3.)任务是正确的   在...中宣布   项目文件,或* .tasks文件   位于   “C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319”   。目录

但我检查了所有这些事情:

  1. xunit.runner.msbuild.dll中的任务类为Xunit.Runner.MSBuild.xunit(xunit在类名中为小写)。
  2. 任务类继承自Task,它实现了ITask。
  3. 所以也许在UsingTask中存在问题,但我不知道它是什么。
  4. (我还认为问题可能是xunit.runner.msbuild.dll针对的是.NET 2.0,而我正在使用VS 2010,但我在.NET 2.0中重新创建了测试运行器项目并且问题仍然存在。 )

    有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

您需要指定 xunit.runner.msbuild.dll 的正确路径。 首先,您可以设置完整路径并测试xunit是否正常工作。 但是对于真实环境,您应该指定dll的相对路径。

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

MSBuildProjectDirectory reserved property,其中包含“项目文件所在目录的绝对路径”。

修改

尝试按全名使用目标 Xunit.Runner.MSBuild.xunit

<Target Name="Test">
    <Xunit.Runner.MSBuild.xunit Assembly="$(MSBuildProjectDirectory)\..\OnePageOneDb.Tests\bin\Debug\OnePageOneDb.Tests.dll" />
</Target>

答案 1 :(得分:0)

如果我安装了Pex和Moles,我会得到完全相同的错误消息。卸载后一切正常。

答案 2 :(得分:0)

默认构建于&#34;发布&#34;配置触发器运行xunit测试。 如果您尝试在tfsbuild中禁用运行xunit测试,请传递以下构建参数。 这在新的跨平台构建中非常有用,其中运行单元测试是一个单独的步骤。

/p:RunXunitTests=false