Agent skill
xunit-mtp
use this skill when creating new or reviewing xunit v3 test projects using Microsoft Testing Platform (MTP) to ensure best patterns, practices, and proper configuration
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/testing/xunit-mtp
SKILL.md
xUnit v3 with Microsoft Testing Platform (MTP) - Best Practices
this skill provides guidance for creating and reviewing xunit v3 test projects that use Microsoft Testing Platform (MTP) for modern, performant test execution.
when to use this skill
- creating new xunit v3 test projects
- reviewing existing xunit test projects for MTP compatibility
- migrating from xunit v2 or VSTest to xunit v3 with MTP
- troubleshooting xunit v3 MTP project configurations
project setup requirements
minimum version requirements
- .NET 8 SDK later
- xunit.v3 (3.1.0+)
- Microsoft.Testing.Platform (2.0.0+) for best
dotnet testintegration
essential MSBuild properties
all xunit v3 MTP projects must include:
<PropertyGroup>
<!-- required: makes the test project executable -->
<OutputType>Exe</OutputType>
<!-- required: enables MTP for command-line execution -->
<UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>
<!-- recommended: enables `dotnet test` support -->
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
<!-- recommended: shows test failures per test (has performance impact) -->
<TestingPlatformShowTestsFailure>true</TestingPlatformShowTestsFailure>
<!-- standard test project flags -->
<IsPackable>false</IsPackable>
<IsTestProject>true</IsTestProject>
</PropertyGroup>
recommended package references
for .NET 8+ projects
<ItemGroup>
<!-- core xunit v3 packages -->
<PackageReference Include="xunit.v3" Version="3.1.0" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5" />
<!-- code coverage support -->
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="17.10.1" />
<!-- optional: TRX reporting -->
<PackageReference Include="Microsoft.Testing.Extensions.TrxReport" Version="1.7.0" />
</ItemGroup>
global usings
<ItemGroup>
<Using Include="Xunit" />
</ItemGroup>
project structure best practices
directory organization
SolutionRoot/
├── src/
│ └── YourProject/
└── tests/
└── YourProject.Tests/ # test project
├── YourProject.Tests.csproj
├── testconfig.json # MTP configuration (optional)
├── UnitTests/ # organize by test type
├── IntegrationTests/
└── Fixtures/ # shared test fixtures
test organization patterns
namespace YourProject.Tests.UnitTests;
// organize tests by the class they're testing
public class CalculatorTests
{
// use descriptive test method names that explain the scenario
[Fact]
public void Add_WithPositiveNumbers_ReturnsCorrectSum()
{
// arrange
var calculator = new Calculator();
// act
var result = calculator.Add(2, 3);
// assert
Assert.Equal(5, result);
}
// use theory for parameterized tests
[Theory]
[InlineData(2, 3, 5)]
[InlineData(-1, 1, 0)]
[InlineData(0, 0, 0)]
public void Add_WithVariousInputs_ReturnsCorrectSum(int a, int b, int expected)
{
var calculator = new Calculator();
var result = calculator.Add(a, b);
Assert.Equal(expected, result);
}
}
configuration best practices
testconfig.json (optional)
for MTP-specific configuration, create a testconfig.json file:
{
"Microsoft.Testing.Platform": {
"TelemetryOptOut": true,
"ExitProcessOnUnhandledException": false
}
}
environment variables
# disable telemetry
TESTINGPLATFORM_TELEMETRY_OPTOUT=1
# enable diagnostic logging
TESTINGPLATFORM_DIAGNOSTIC=1
TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_DIRECTORY=/path/to/logs
running tests
command-line execution
# run the test project directly as an executable
dotnet run --project YourProject.Tests
# or after building
./bin/Debug/net8.0/YourProject.Tests
# with MTP options
dotnet run --project YourProject.Tests -- --minimum-expected-tests 10
using dotnet test
# standard execution
dotnet test
# with code coverage
dotnet test --coverage --coverage-output-format cobertura
# with TRX reporting
dotnet test -- --report-trx
# filter tests
dotnet test --filter "FullyQualifiedName~Calculator"
Visual Studio integration
- requires Visual Studio 2022 (17.14.16+)
- test explorer automatically detects MTP tests
- no additional configuration needed
migration from VSTest/xUnit v2
migration checklist
-
update package references:
- replace
xunitwithxunit.v3 - remove
Microsoft.NET.Test.Sdk(optional, but recommended)
- replace
-
add MSBuild properties:
- add
<OutputType>Exe</OutputType> - add
<UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner> - add
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
- add
-
update code coverage:
- replace
coverlet.collectorwithMicrosoft.Testing.Extensions.CodeCoverage - update coverage commands to use
--coverageinstead of/p:CollectCoverage=true
- replace
-
update CI/CD pipelines:
- MTP projects work with standard
dotnet testcommands - update coverage and reporting commands as needed
- MTP projects work with standard
backward compatibility
during migration, you can maintain both VSTest and MTP support:
- keep
Microsoft.NET.Test.Sdkpackage reference - use conditional MSBuild properties
- gradually migrate as development environments update
common issues and solutions
issue: tests don't run in dotnet test
solution: ensure TestingPlatformDotnetTestSupport is set to true in the project file.
issue: coverage not collected
solution: add Microsoft.Testing.Extensions.CodeCoverage package and use --coverage flag.
issue: tests not discovered in Visual Studio
solution: ensure Visual Studio 2022 version is 17.14.16 or later, and rebuild the solution.
issue: performance issues with TestingPlatformShowTestsFailure
solution: this property has a performance impact. disable it for large test suites:
<TestingPlatformShowTestsFailure>false</TestingPlatformShowTestsFailure>
code review checklist
when reviewing xunit v3 MTP projects, verify:
-
OutputTypeis set toExe -
UseMicrosoftTestingPlatformRunneris set totrue -
TestingPlatformDotnetTestSupportis set totrue(if using dotnet test) - package references are up to date (xunit.v3 3.1.0+ )
- tests follow naming conventions and organizational patterns
- async tests properly use
async Taskinstead ofasync void - theory tests have appropriate test data
- test isolation is maintained (no shared mutable state)
- proper use of fixtures for expensive setup/teardown
- appropriate assertions are used
additional resources
Didn't find tool you were looking for?