我正在尝试建立一个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” 。目录
但我检查了所有这些事情:
Xunit.Runner.MSBuild.xunit
(xunit在类名中为小写)。(我还认为问题可能是xunit.runner.msbuild.dll针对的是.NET 2.0,而我正在使用VS 2010,但我在.NET 2.0中重新创建了测试运行器项目并且问题仍然存在。 )
有人可以帮忙吗?
答案 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