簡體   English   中英

在 .NET Core 中運行 NUnit 測試

[英]Run NUnit tests in .NET Core

我正在嘗試使用 .NET Core 為我的 C# 項目運行單元測試。 我正在為運行時使用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

但它不起作用。

我該如何稱呼跑步者? 或者是否有另一個單元測試框架適用於當前版本的 .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.json遷移到csproj使dotnet-test-nunit測試適配器過時,因此我們需要發布另一個更新的適配器來運行 .NET Core 測試。 如果您使用 VS2017 和新的 .NET Core 工具,請參閱在 Visual Studio 2017中使用NUnit 測試 .NET Core 如果您使用的是project.json請參閱下面的更新。

更新: NUnit 現在支持dotnet test ,因此您不再需要使用 NUnitLite。 請參閱使用 NUnit 3 測試 .NET Core RC2 和 ASP.NET Core RC2


NUnit 控制台(和底層 NUnit 引擎)尚不支持針對 .NET 核心運行單元測試。 希望我們能在 NUnit 3.4 中獲得這種支持。

同時,您可以使用 NUnitLite 將您的測試切換到自動執行的測試運行器。

我寫了一篇關於使用 NUnit 3 測試 .NET Core過程的博客文章。 一個快速的總結是;

  1. 為您的測試項目創建一個 .NET Core 控制台應用程序。
  2. 從您的測試項目中引用NUnitNUnitLite 你不需要跑步者。
  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);
    }
  }
}

有關更完整的信息,請參閱我的博客文章

我按照Rob-Prouse 的建議做了,做了一些小改動。 它現在終於起作用了。

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

請注意,您可能還必須將項目從類庫轉換為控制台應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM