xUnit.net v2 XML Format to JUnit Format
dotnet test
, I recommend using the JUnit Test Logger instead. The output is better (at least in CircleCI). If you can't install an additional NuGet package in your test project(s), can't modify your build or are processing test results file(s) that have previously been generated, please read on.
Package | Release |
---|---|
dotnet-xunit-to-junit |
CI | Status | Platform(s) | Framework(s) | Test Framework(s) |
---|---|---|---|---|
GitHub | Ubuntu |
netcoreapp3.1 , net5.0 , net6.0 |
netcoreapp3.1 , net5.0 , net6.0 |
CircleCI can only parse test results in the JUnit format. This Extensible Stylesheet Language Transformations
can transform a xUnit.net v2 XML
test results file into a JUnit
test results file.
Note: this only handles the easiest use case for the moment, as soon as I encounter issues in real life usage I'll add extra testing scenarios.
Consume the transform
JUnit.xslt
through the dotnet-xunit-to-junit
NuGet
package
Consume dotnet-xunit-to-junit
is a .NET
global tool:
dotnet tool install -g dotnet-xunit-to-junit
dotnet xunit-to-junit "path-to-xunit-test-results.xml" "desired-path-to-junit-test-results.xml"
JUnit.xslt
directly from C#
Consume Note: For .NET Core
, this requires nestandard2.0
and above.
// Required using statement
using System.Xml.Xsl;
// Change the value of these three variables
const string inputFilePath = "C:/tmp/xunit.xml";
const string outputFilePath = "C:/tmp/junit.xml";
const string xsltFilePath = "C:/tmp/JUnit.xslt";
var xlsTransform = new XslCompiledTransform();
xlsTransform.Load(xsltFilePath);
var writerSettings = xlsTransform.OutputSettings.Clone();
// Save without BOM, CircleCI can't read test results files starting with a BOM
writerSettings.Encoding = new UTF8Encoding(false);
using (var stream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write))
using (var results = XmlWriter.Create(stream, writerSettings))
{
xlsTransform.Transform(inputFilePath, results);
}
Building locally
Run this command to build on Windows:
.\build.ps1
Run this command to build on Linux / macOS:
./build.sh
If you want to pack the .NET Global Tool
, you can run .\build.ps1 --package
.