web-dev-qa-db-fra.com

Exécuter des tests NUnit dans le noyau de dotnet

J'essaie d'exécuter des tests unitaires pour mon projet c # avec le noyau de dotnet. J'utilise un conteneur Docker pour l'exécution. 

Dockerfile

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

"NUnit" et "NUnit.Runners" ont été ajoutés à 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": { }
}

Exécutez dotnet restore avec le résultat suivant

...
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.

essayé de faire les tests avec 

dotnet nunit

dotnet nunit-console

Pas travailler. 

Alors ma question est: comment vais-je appeler le coureur? Ou quelqu'un peut-il suggérer un autre framework de test unitaire qui fonctionne avec la version actuelle de dotnet core?

Appréciez toute aide que vous pouvez fournir. Je vous remercie!

25
Awakening Byte

Mise à jour 4: Le NUnit3TestAdapter v3.8 a été publié, il n'est donc plus alpha.

Mise à jour 3: Avec NUnit3TestAdapter v3.8.0-alpha1 il est maintenant possible d'exécuter les tests à l'aide de la commande dotnet test. Il vous suffit d’avoir ces dépendances dans votre projet de test:

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

Vous pouvez l'essayer!

Update 2: Visual Studio 2017 et le passage de project.json à csproj ont rendu l'adaptateur de test dotnet-test-nunit obsolète. Nous avons donc dû publier un autre adaptateur mis à jour pour exécuter les tests .NET Core. Veuillez consulter Test de .NET Core avec NUnit dans Visual Studio 2017 si vous utilisez VS2017 et le nouvel outil .NET Core. Consultez la mise à jour ci-dessous si vous utilisez project.json.

Update: NUnit prend désormais en charge dotnet test, de sorte que vous n'êtes plus obligé d'utiliser NUnitLite. Voir Test de .NET Core RC2 et ASP.NET Core RC2 avec NUnit 3 .


La console NUnit (et le moteur NUnit sous-jacent) ne prend pas encore en charge l'exécution de tests unitaires sur le noyau .NET. Espérons que nous obtiendrons ce support dans NUnit 3.4.

En attendant, vous pouvez utiliser NUnitLite pour passer vos tests à un programme d'exécution de tests à exécution automatique. 

J'ai écrit un article de blog sur le processus à Test de .NET Core avec NUnit 3 . Un résumé rapide est;

  1. Créez une application .NET Core Console pour votre projet de test.
  2. Référence NUnit et NUnitLite de votre projet test. Vous n'avez pas besoin du coureur.
  3. Modifiez main() pour exécuter les tests unitaires.

Ça devrait ressembler à ça;

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

Pour des informations plus complètes, voir mon blog .

27
Rob Prouse

Fait comme @ Rob-Prouse suggéré avec des changements mineurs. Cela fonctionne enfin maintenant.

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

    }
}
3
Awakening Byte

Quelques ajustements à la réponse, pour le faire compiler.

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

Notez que vous devrez peut-être également convertir votre projet d'une bibliothèque de classes en application console.

0
Drew Noakes