我有一个相对简单的解决方案。在MSBUILD(在VS 2017 Mac中)下,所有功能都可以正常工作。我正在创建一个蛋糕制作脚本,但我只是无法进行单元测试来工作。有很多例子,但似乎没有一个有效。有些人要求dotnetcoretest,最适合xunit2。我的项目中都没有工作。
我在运行xunit2时会出现以下错误: System.InvalidOperationException: Unknown test framework: could not find xunit.dll (v1) or xunit.execution.*.dll (v2) in /Users/dev/Projects/MyProject/tst/MyProject.Serialization.UnitTests/bin/Release/netcoreapp1.1
并且该输出是绝对有效的,该文件实际上不存在。这是我的单位测试项目的参考:
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.0.0" />
<PackageReference Include="xunit" Version="2.2.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
<PackageReference Include="xunit.runner.console" Version="2.2.0" />
<PackageReference Include="FluentAssertions" Version="4.19.2" />
<PackageReference Include="Moq" Version="4.7.99" />
<PackageReference Include="FluentAssertions.AspNetCore.Mvc" Version="0.7.0-beta1" />
<PackageReference Include="AutoMapper" Version="6.1.1" />
<PackageReference Include="ExpectedObjects" Version="1.3.0" />
<PackageReference Include="OpenCover" Version="4.6.519" />
<PackageReference Include="xunit.extensibility.execution" Version="2.2.0" />
</ItemGroup>
我已经引用了xunit.runner.console
和xunit.extensibility.execution
,但是这些并未复制到目标目录。.NET Core似乎没有任何强制性的方法,即使我手动复制测试组件仍然不会加载。
这是我的蛋糕测试脚本:
#tool nuget:?package=NUnit.ConsoleRunner&version=3.4.0
#tool nuget:?package=xunit.runner.console
...
Task("Test")
.IsDependentOn("Build")
.Does(() =>
{
Information("Start Running Tests");
XUnit2(string.Format("./tst/**/*Tests/bin/{0}/**/*Tests.dll", configuration), new XUnit2Settings
{
});
});
显然我缺少一些非常基本的东西,但是由于所有相互矛盾的信息,我都不知道它是什么。我不应该使用xunit吗?
我遇到同一问题,通过使用dotnetcoretest而不是xunit2。
来解决它。Task("Test")
.Does(() =>
{
DotNetCoreTest("./test/[TestProjectPath]/[TestProject.csproj]");
});
我偶然发现了一个类似的问题,并为最新的xUnit v2.4.0
找到了以下解决方案,并希望为将来的旅行者分享它。因此,测试是在Visual Studio中发现的,可以通过Cake Build Files通过命令行执行。
stack
- Visual Studio 2017 Community Edtion(
v15.8.4
) - .NET Core 2.1
- 蛋糕制造
- Windows 10
测试项目
该项目称为MyProject.Tests
,相对于解决方案文件夹,位于testMyProject.Tests
文件夹中。MyProject.Tests.csproj
项目文件在其当前版本v2.4.0
中包含包装xunit
和xunit.runner.visualstudio
。后者需要发现测试。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="xunit" Version="2.4.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
</ItemGroup>
</Project>
蛋糕
build.cake
具有以下代码。Task("Test")
在test
文件夹中获取所有项目,该文件夹以.Tests
结尾并执行它们。
#tool nuget:?package=xunit.runner.console
// Configuration argument that can be passed via command line
// Default is "Release"
var configuration = Argument("configuration", "Release");
// ... omitted for brevity
// Run all test projects located in ./test folder
Task("Test")
.IsDependentOn("Build")
.Does(() =>
{
var projects = GetFiles("./test/**/*.Tests.csproj");
foreach(var project in projects)
{
DotNetCoreTest(
project.FullPath,
new DotNetCoreTestSettings()
{
// Set configuration as passed by command line
Configuration = configuration
});
}
});