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.
Ich kann Code Coverage mit OpenCover 4.6.166 mit dieser Konfiguration erhalten:
}
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:
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:
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.
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.
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 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.
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 .
Ich habe es funktioniert XUnit.
Wichtige Dinge zu beachten:
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%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.
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] *
Tags und Links c# xunit visual-studio code-coverage visual-studio-2015