VS2015-Codeabdeckung arbeitet nicht mit Tests in ASP.NET Core 1.0 (früher bekannt als ASP.NET 5)

8

Ich habe eine ASP.NET Core 1.0-Lösung (zuvor bekannt als ASP.NET 5) mit ein paar Klassenbibliotheken (Paket) und einem ASP.NET MVC6-Projekt.

Ich habe eine Testbibliothek mit der neuen XUnit 2.0, die Core 1.0 unterstützt.

Aus irgendeinem Grund erzeugt meine Code-Abdeckung jedoch keine Ergebnisse, wenn ich sie in allen meinen Tests, die bestanden haben, durchführe.

Standardmäßig werden ASP.NET Core 1.0-Projekte von der Laufzeitumgebung im Speicher erstellt, und es bleiben keine Artefakte auf der Festplatte erhalten. In den Einstellungen habe ich also "Produce all outputs on build" für jedes Projekt in der Lösung aktiviert. Jetzt, wenn ich baue, sehe ich die pdb und dll Dateien, die im Artefakte Ordner ausgegeben werden. Ich dachte mir, dass Code-Coverage danach funktionieren würde, aber immer noch keine Ergebnisse.

Vielleicht funktioniert die Codeabdeckung einfach nicht mit dem neuen .NET Core 1.0. Wenn jemand Informationen darüber hat, wäre das großartig.

    
Blake Rivell 06.04.2016, 19:08
quelle

5 Antworten

5

Ich kann Code Coverage mit OpenCover 4.6.166 mit dieser Konfiguration erhalten:

project.json Beispiel

%Vor%

}

Ich benutze das Myget CI Feed meiner NuGet.config:

%Vor%

Stellen Sie Abhängigkeiten mit der Option - infer-runtimes wieder her:

%Vor%

Verwenden Sie dann OpenCover mit dieser Befehlszeile:

%Vor%

Beachten Sie, dass der Schalter -f net451 wichtig ist. Er sagt zu dotnet, das net451-Framework zu verwenden. Um netcoreapp1.0 abzudecken, verwenden Sie -f netcoreapp1.0 .

In meiner Konsolenausgabe kann ich diese Ergebnisse sehen:

    
agua from mars 21.07.2016 15:57
quelle
3

Ich habe ein .NET Core-Projekt mit funktionierender Codeabdeckung mit xUnit 2. *, Appveyor, OpenCover und Coveralls, aber es musste auf .NET Platform Standard erweitert werden. Sie können die Ergebnisse in der entsprechenden Open-Source-Bibliothek hier sehen.

Einige bemerkenswerte Schlussfolgerungen:

  1. Ich konnte keine Möglichkeit finden, OpenCover auf "portable" debugType * .pdb-Dateien aufmerksam zu machen. Ich musste das Legacy-Windows-Vollformat * .pdb verwenden. Dies wird erreicht, indem 'debugType' in der Datei 'project.json' Ihres Projekts unter 'buildOptions' auf 'full' gesetzt wird.

  2. Ich musste OpenCover unter Windows ausführen, und es musste über eine Version des herkömmlichen .NET Framework laufen. Wenn Sie noch nicht haben, konfigurieren Sie Ihr Nicht-Test-Projekt auf verwenden Sie .NET Platform Standard anstelle von .NET Core explizit, wie ich hier . Dann zerbrich in deinem Testprojekt deinen .NET Core und deine herkömmlichen .NET Frameworks, wie ich es tat hier . Angenommen, Sie verwenden .NET Platform Standard 1.6, dann würden Sie net463 verwenden, wo ich net46 hätte.

  3. Führen Sie OpenCover mit dem herkömmlichen .NET Framework über das Befehlszeilentool dotnet test aus, nicht mit dem xUnit-Konsolen-Runner. Sie können mein Code Coverage-Generierungs (und -Übertragungs-) Powershell-Skript hier . Wo ich net46 anführe, würden Sie die Version angeben, die Sie in Ihrem Testprojekt verwendet haben (vermutlich net463 ).

Hier ist das Skript aus der Quelle gezogen. Möglicherweise müssen Sie das Argument filter in Bezug auf Ihre Abhängigkeiten anpassen oder nicht.

%Vor%

Technisch gesehen wird .NET Core nicht getestet. Dies testet die traditionelle .NET Framework-Interpretation eines anderen .NET Core-Projekts. Wenn Sie jedoch keine bedingte Kompilierung basierend auf dem von Ihnen verwendeten Framework durchführen, sind die Code Coverage-Ergebnisse identisch.

Eine kleine Warnung: Wenn Sie sich das Beispielrepository ansehen, sehen Sie, dass ich einen DebugType von portable , nicht full für meine project.json Datei habe. Das liegt daran, dass ich Travis CI für Linux & amp; Mac OS X erstellt, und das schlägt fehl, wenn Sie full debugTypes verwenden. Ich habe das umgangen, indem ich programmgesteuert über ein Powershell-Skript eingestellt habe läuft nach meinem Build auf dem Appveyor .

    
Technetium 05.09.2016 04:39
quelle
2

Ich habe es funktioniert XUnit.

Wichtige Dinge zu beachten:

  • xunit.runner.json ist der Ort, an den Ihre xunit-Konfigurationen gehen
  • Das Microsoft.CodeCoverage-Paket wird benötigt, um Code Coverage in Visual Studio auszuführen

Sie erhalten alle Tests im Test Runner Explorer. Sie können die Codeabdeckung auch mit dem Visual Studio-Menüelement analysieren. Einzige Sache, die ich nicht arbeiten kann, ist Codeabdeckung, die hervorhebt: Codehülle-Hervorhebung im Visual Studio von .net core

Dies ist meine project.json

%Vor%     
l3utterfly 08.11.2016 06:13
quelle
0

Ich folgte diesem Blog und konnte mit opencover einige Ergebnisse erzielen, obwohl ich nicht glaube, dass es korrekt ist.

Und ich muss herausfinden, warum die falschen Zahlen, wenn Sie einen Weg finden, es zu tun, bitte teilen.

Ссылка

    
Miguel de Sousa 27.04.2016 13:28
quelle
0

Es gibt einen Thread im OpenCover GitHub-Repository zu diesem Thema. Der Trick, es zum Laufen zu bringen, wird in einem Wiki-Beitrag zur Kenntnis genommen.

  

Der Trick (vom Benutzer bereitgestellt) besteht darin, das Argument --lib von dnx.exe zu verwenden, z. B.

%Vor%      

c: \ Projekte \\ common \ bin \ debug \ dnx451 -p   c: \ projekte \ test \ Website.Tests test "           -output: coverage.xml           -Filter: + [Website] *

    
Will Ray 27.04.2016 14:30
quelle