运行 .NET Core 中的 NUnit 测试

Run NUnit tests in .NET Core

我正在尝试 运行 使用 .NET Core 对我的 C# 项目进行单元测试。 我在 运行 时间使用 Docker 容器。

Docker 文件

FROM microsoft/dotnet:0.0.1-alpha
RUN mkdir /src
WORKDIR /src
ADD . /src
RUN dotnet restore

"NUnit" 和 "NUnit.Runners" 已添加到 project.json

"version": "1.0.0-*",
"compilationOptions": {
    "emitEntryPoint": true
},

"dependencies": {
    "NETStandard.Library": "1.0.0-rc2-23811",
    "NUnit": "3.2.0",
    "NUnit.Runners": "3.2.0"
},
"frameworks": {
    "dnxcore50": { }
}

运行 dotnet restore 成功,输出如下

...
log  : Installing NUnit.ConsoleRunner 3.2.0.
log  : Installing NUnit.Extension.NUnitV2ResultWriter 3.2.0.
log  : Installing NUnit.Extension.NUnitV2Driver 3.2.0.
log  : Installing NUnit.Extension.VSProjectLoader 3.2.0.
log  : Installing NUnit.Extension.NUnitProjectLoader 3.2.0.
log  : Installing NUnit.Runners 3.2.0.
info : Committing restore...
log  : Restore completed in 4352ms.

我尝试 运行 测试:

dotnet nunit

dotnet nunit-console

但是不行。

我要怎么给 运行ner 打电话?或者是否有另一个单元测试框架适用于当前版本的 .NET Core?

更新 4: NUnit3TestAdapter v3.8 已经发布,因此不再是 alpha。

更新 3: 使用 NUnit3TestAdapter v3.8.0-alpha1 现在可以 运行 使用 dotnet test 命令进行测试。你只需要在你的测试项目中有这些依赖:

<PackageReference Include="nunit" Version="3.7.0" />
<PackageReference Include="NUnit3TestAdapter" Version="3.8.0-*" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.*" />

你可以试试看!

更新 2: Visual Studio 2017 以及从 project.jsoncsproj 的移动使得 dotnet-test-nunit 测试适配器已过时,所以我们需要为 运行 .NET Core 测试发布另一个更新的适配器。如果您使用的是 VS2017 和新的 .NET Core 工具,请参阅 Testing .NET Core with NUnit in Visual Studio 2017。如果您使用 project.json.

,请参阅下面的更新

更新: NUnit 现在支持 dotnet test,因此您不必再使用 NUnitLite。参见 testing .NET Core RC2 and ASP.NET Core RC2 using NUnit 3


NUnit 控制台(和底层 NUnit 引擎)尚不支持 运行ning 针对 .NET 核心的单元测试。希望我们能在 NUnit 3.4 中获得这种支持。

同时,您可以使用 NUnitLite 将测试切换为自执行测试 运行ner。

我在 Testing .NET Core using NUnit 3 写了一篇关于过程的博客 post。快速总结是;

  1. 为您的测试项目创建 .NET Core 控制台应用程序。
  2. 从您的测试项目中引用 NUnit and NUnitLite。你不需要 运行ner.
  3. 修改 main() 以执行单元测试。

它应该是这样的;

using NUnitLite;
using System;
using System.Reflection;

namespace MyDnxProject.Test
{
  public class Program
  {
    public int Main(string[] args)
    {
      var writter = new ExtendedTextWrapper(Console.Out);
      new AutoRun(typeof(Program).GetTypeInfo().Assembly).Execute(args, writter, Console.In);
    }
  }
}

有关更完整的信息,请参阅 my blog post

我按照 做了一些小改动。现在终于可以用了。

using System;
using System.Reflection;
using NUnitLite;
using NUnit.Common;

........

public class Program
{
    public static void Main(string[] args)
    {

        var writter = new ExtendedTextWrapper(Console.Out);
         new AutoRun(typeof(Program).GetTypeInfo().Assembly).Execute(args, writter, Console.In);

    }
}

对答案进行一些调整,使其编译。

using System;
using System.Reflection;
using NUnit.Common;
using NUnitLite;

namespace NetMQ.Tests
{
    public static class Program
    {
        private static int Main(string[] args)
        {
            using (var writer = new ExtendedTextWrapper(Console.Out))
            {
                return new AutoRun(Assembly.GetExecutingAssembly())
                    .Execute(args, writer, Console.In);
            }
        }
    }
}

请注意,您可能还需要将项目从 class 库转换为控制台应用程序。