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
What this skill does
# 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 test` integration
### essential MSBuild properties
all xunit v3 MTP projects must include:
```xml
<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
```xml
<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
```xml
<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
```csharp
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:
```json
{
"Microsoft.Testing.Platform": {
"TelemetryOptOut": true,
"ExitProcessOnUnhandledException": false
}
}
```
### environment variables
```bash
# disable telemetry
TESTINGPLATFORM_TELEMETRY_OPTOUT=1
# enable diagnostic logging
TESTINGPLATFORM_DIAGNOSTIC=1
TESTINGPLATFORM_DIAGNOSTIC_OUTPUT_DIRECTORY=/path/to/logs
```
## running tests
### command-line execution
```bash
# 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
```bash
# 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
1. **update package references**:
- replace `xunit` with `xunit.v3`
- remove `Microsoft.NET.Test.Sdk` (optional, but recommended)
2. **add MSBuild properties**:
- add `<OutputType>Exe</OutputType>`
- add `<UseMicrosoftTestingPlatformRunner>true</UseMicrosoftTestingPlatformRunner>`
- add `<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>`
3. **update code coverage**:
- replace `coverlet.collector` with `Microsoft.Testing.Extensions.CodeCoverage`
- update coverage commands to use `--coverage` instead of `/p:CollectCoverage=true`
4. **update CI/CD pipelines**:
- MTP projects work with standard `dotnet test` commands
- update coverage and reporting commands as needed
### backward compatibility
during migration, you can maintain both VSTest and MTP support:
- keep `Microsoft.NET.Test.Sdk` package 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:
```xml
<TestingPlatformShowTestsFailure>false</TestingPlatformShowTestsFailure>
```
## code review checklist
when reviewing xunit v3 MTP projects, verify:
- [ ] `OutputType` is set to `Exe`
- [ ] `UseMicrosoftTestingPlatformRunner` is set to `true`
- [ ] `TestingPlatformDotnetTestSupport` is set to `true` (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 Task` instead of `async 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
- [Microsoft Testing Platform documentation](https://learn.microsoft.com/en-us/dotnet/core/testing/microsoft-testing-platform-intro)
- [xUnit.net v3 documentation](https://xunit.net/docs/getting-started/v3/microsoft-testing-platform)
- [Migration guide from VSTest to MTP](https://learn.microsoft.com/en-us/dotnet/core/testing/migrating-vstest-microsoft-testing-platform)
- [Unit testing best practices](https://learn.microsoft.com/en-us/dotnet/core/testing/unit-testing-best-practices)
Related in Code Review
gstack
IncludedFast headless browser for QA testing and site dogfooding. Navigate pages, interact with elements, verify state, diff before/after, take annotated screenshots, test responsive layouts, forms, uploads, dialogs, and capture bug evidence. Use when asked to open or test a site, verify a deployment, dogfood a user flow, or file a bug with screenshots. (gstack)
startup-due-diligence
IncludedLegal due diligence review for seed-stage and Series A startups (US, Delaware C-Corp focus). Supports both investor and founder perspectives. Capabilities include: (1) Interactive document review and issue spotting; (2) Document request list generation; (3) Cap table and SAFE/convertible note analysis; (4) Red flag identification with severity ratings; (5) Diligence report generation. TRIGGERS: due diligence, DD, startup investment, cap table review, Series A, seed round, investor diligence, legal review startup, SAFE analysis, convertible note, 409A, founder vesting.
interview-master
IncludedThis skill should be used when the user asks to "generate interview questions", "prepare for interview", "optimize resume", "conduct mock interview", "analyze git commits for resume", "generate resume from code", "review my resume", or mentions interview preparation, career assistance, or extracting project experience from git history. Provides comprehensive interview and career development guidance for both job seekers and interviewers.
fix-issue
IncludedFixes GitHub issues using parallel analysis agents for root cause investigation, code exploration, and regression detection. Reads issue context from gh CLI, searches codebase and memory for related patterns, generates a fix with tests, and links the resolution back to the issue via PR. Includes prevention analysis to avoid recurrence. Use when debugging errors, resolving regressions, fixing bugs, or triaging issues.
sf-apex
IncludedGenerates and reviews Salesforce Apex code with 150-point scoring. TRIGGER when: user writes, reviews, or fixes Apex classes, triggers, test classes, batch/queueable/schedulable jobs, or touches .cls/.trigger files. DO NOT TRIGGER when: LWC JavaScript (use sf-lwc), Flow XML (use sf-flow), SOQL-only queries (use sf-soql), or non-Salesforce code.
swift-development
IncludedComprehensive Swift development for building, testing, and deploying iOS/macOS applications. Use when Claude needs to: (1) Build Swift packages or Xcode projects from command line, (2) Run tests with XCTest or Swift Testing framework, (3) Manage iOS simulators with simctl, (4) Handle code signing, provisioning profiles, and app distribution, (5) Format or lint Swift code with SwiftFormat/SwiftLint, (6) Work with Swift Package Manager (SPM), (7) Implement Swift 6 concurrency patterns (async/await, actors, Sendable), (8) Create SwiftUI views with MVVM architecture, (9) Set up Core Data or SwiftData persistence, or any other Swift/iOS/macOS development tasks.