【问题标题】:XUnit working with .NET Core using CakeXUnit 使用 Cake 与 .NET Core 一起工作
【发布时间】:2017-09-19 19:00:05
【问题描述】:

我有一个相对简单的解决方案。在 MSBuild 下一切正常(在 VS 2017 Mac 中)。我正在创建一个 Cake 构建脚本,但我无法让单元测试工作。有很多例子,但似乎没有一个是有效的。有些人呼吁 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 吗?

【问题讨论】:

  • 这是一个公共存储库吗?您是否还在 Cake 脚本中添加了 xunit 作为 #tool 预处理器?
  • 很遗憾没有 :-( 是的,我有 #tool 指令。已编辑问题要显示。
  • 您能否创建一个托管在 GitHub 或类似网站上的小型示例应用程序来说明您遇到的问题?
  • 也许可以看看flubu,它是蛋糕的不错替代品。 Flubu 是一个 C# 库,用于使用 C# 代码构建项目和执行部署脚本。更多信息:github.com/flubu-core/flubu.core/wiki

标签: c# unit-testing .net-core cakebuild


【解决方案1】:

我遇到了同样的问题,使用 DotNetCoreTest 而不是 XUnit2 解决它。

Task("Test")
    .Does(() => 
    {
        DotNetCoreTest("./test/[TestProjectPath]/[TestProject.csproj]");
    });

【讨论】:

    【解决方案2】:

    我偶然发现了一个类似的问题,并为最新的xUnit v2.4.0 找到了以下解决方案,并希望将其分享给未来的旅行者。这样,测试就可以在 Visual Studio 中发现,并且可以通过命令行与 CAKE 构建文件一起执行。

    堆栈

    • Visual Studio 2017 社区版 (v15.8.4)
    • .NET Core 2.1
    • 蛋糕制作
    • Windows 10

    测试项目

    该项目名为MyProject.Tests,位于相对于解决方案文件夹的\test\MyProject.Tests 文件夹中。 MyProject.Tests.csproj 项目文件包括包xunitxunit.runner.visualstudio 的当前版本v2.4.0。后者是发现测试所必需的。

    <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
              });
        }
    });
    

    【讨论】:

      猜你喜欢
      • 2016-09-26
      • 2017-09-03
      • 2018-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 2017-08-01
      • 1970-01-01
      相关资源
      最近更新 更多