Xunit使用蛋糕与.NET核心一起工作



我有一个相对简单的解决方案。在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.consolexunit.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中包含包装xunitxunit.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
          });
    }
});

最新更新