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

Rya*_*ndy 5 msbuild xunit msbuild-task

我正在尝试建立一个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>
Run Code Online (Sandbox Code Playgroud)

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

无法从程序集C:\ Users [myusername]\Code\OnePageOneDb\OnePageOneDb.TestRunner\xunit.runner.msbuild.dll加载"Xunit.Runner.MSBuild.xunit"任务.无法加载文件或程序集'file:/// C:\ Users [myusername]\Code\OnePageOneDb\OnePageOneDb.TestRunner\xunit.runner.msbuild.dll'或其依赖项之一.该系统找不到指定的文件.确认声明是否正确,程序集及其所有依赖项是否可用,以及该任务是否包含实现Microsoft.Build.Framework.ITask的公共类.

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

找不到"xunit"任务.请检查以下内容:1.)项目文件中任务的名称与任务类的名称相同.2.)任务类是"public"并实现Microsoft.Build.Framework.ITask接口.3.)在项目文件或位于"C:\ Windows\Microsoft.NET\Framework\v4.0.30319"目录中的*.tasks文件中正确声明了任务.

但我检查了所有这些东西:

  1. xunit.runner.msbuild.dll中的任务类是Xunit.Runner.MSBuild.xunit(并且xunit 在类名中是小写的).
  2. 任务类继承自Task,后者实现ITask.
  3. 所以也许在UsingTask中存在问题,但我不知道它是什么.

(我还认为问题可能是xunit.runner.msbuild.dll针对的是.NET 2.0,而我正在使用VS 2010,但我在.NET 2.0中重新创建了测试运行器项目并且问题仍然存在.)

有人可以帮忙吗?

Ser*_*kov 2

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

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

MSBuildProjectDirectory是一个保留属性,包含“项目文件所在目录的绝对路径”。

编辑:

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

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