6

我正在尝试设置一个 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 文件)时,我得到以下信息:

无法从程序集 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.) 任务类是“公共的”并且实现了 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. 任务类继承自实现 ITask 的 Task。
  3. 所以可能UsingTask有问题,但我不知道是什么问题。

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

任何人都可以帮忙吗?

4

3 回答 3

2

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

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

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

编辑:

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

<Target Name="Test">
    <Xunit.Runner.MSBuild.xunit Assembly="$(MSBuildProjectDirectory)\..\OnePageOneDb.Tests\bin\Debug\OnePageOneDb.Tests.dll" />
</Target>
于 2011-03-02T12:05:31.307 回答
0

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

于 2011-09-27T20:20:40.113 回答
0

默认情况下,在“发布”配置中构建会触发运行 xunit 测试。如果您尝试在 tfsbuild 中禁用运行 xunit 测试,请传递以下构建参数。这在运行单元测试是一个单独步骤的新跨平台构建中很有用。

/p:RunXunitTests=false
于 2017-01-25T21:55:41.530 回答