.NET library for TRX and JUnit test results
A .NET library for reading and writing test result files in multiple formats. Provides an in-memory model for test outcomes and results, supporting serialization to/from TRX (Visual Studio Test Results) and JUnit XML formats.
- β¨ Simple API - Intuitive and easy-to-use object model for test results
- π― Type-Safe - Strongly-typed C# classes for test outcomes and results
- πͺΆ Lightweight - Zero runtime dependencies
- π Multi-Target - Supports .NET Standard 2.0, .NET 8, 9, and 10
- π¦ NuGet Ready - Easy integration via NuGet package
- π Multiple Formats - Supports both TRX and JUnit XML formats
- β Compatible - Works with Visual Studio, Azure DevOps, and CI/CD systems
- π Continuous Compliance - Compliance evidence generated automatically on every CI run, following the Continuous Compliance methodology
dotnet add package DemaConsulting.TestResultsOr via Package Manager Console:
Install-Package DemaConsulting.TestResultsusing DemaConsulting.TestResults;
using DemaConsulting.TestResults.IO;
// Create a TestResults instance
var results = new TestResults { Name = "SomeTests" };
// Add test results
results.Results.Add(new TestResult
{
Name = "Test1",
ClassName = "SomeTestClass",
CodeBase = "MyTestAssembly",
Outcome = TestOutcome.Passed,
Duration = TimeSpan.FromSeconds(1.5),
StartTime = DateTime.UtcNow
});
results.Results.Add(new TestResult
{
Name = "Test2",
ClassName = "SomeTestClass",
CodeBase = "MyTestAssembly",
Outcome = TestOutcome.Failed,
ErrorMessage = "Expected value to be 42 but was 0",
ErrorStackTrace = "at SomeTestClass.Test2() in Test.cs:line 15"
});
// Save as TRX (Visual Studio format)
File.WriteAllText("results.trx", TrxSerializer.Serialize(results));
// Save as JUnit XML
File.WriteAllText("results.xml", JUnitSerializer.Serialize(results));The library can automatically detect and convert between formats:
using DemaConsulting.TestResults.IO;
// Automatically detect and deserialize any supported format
var results = Serializer.Deserialize(File.ReadAllText("test-results.xml"));
// Convert JUnit to TRX
var junitResults = JUnitSerializer.Deserialize(File.ReadAllText("junit-results.xml"));
File.WriteAllText("converted.trx", TrxSerializer.Serialize(junitResults));The library supports the following test outcomes via the TestOutcome enum:
Successful: Passed, PassedButRunAborted, Warning
Failure: Failed, Error, Timeout, Aborted
Skipped/Not Run: NotExecuted, NotRunnable, Pending
Other: Completed, Inconclusive, Disconnected, InProgress
Helper extension methods: IsPassed(), IsFailed(), IsExecuted()
pwsh ./build.ps1The TestResults User Guide is available on the TestResults releases page.
See CONTRIBUTING.md for guidelines.
This project is licensed under the MIT License β see LICENSE.