Skip to main content
Modern .NET testing, recompiled

Tests should run.Not make you wait.

TUnit moves discovery to compile time, runs tests in parallel, and catches mistakes before execution—so your feedback loop stays fast as your suite grows.

01 Source-generated02 Native AOT ready03 Open source
CheckoutTests.csTUnit
[Test]
public async Task Checkout_calculates_total()
{
var total = await checkout.GetTotal();
await Assert.That(total)
.IsEqualTo(42.00m);
}
Checkout_calculates_totalPassed
Compile-timediscovery
01 / Installdotnet new install TUnit.Templates
02 / Createdotnet new TUnit -n MyTests
03 / Rundotnet test
Designed differently

Your test suite.
Without the drag.

TUnit shifts work out of runtime and into your compiler, pairing speed with strong diagnostics and APIs that feel native to modern C#.

Less waiting01

Fast by architecture.

Compile-time discovery removes runtime reflection. Parallel execution is the default, with precise controls when order matters.

Source generatedParallel by default
Fewer surprises02

Catch mistakes at build time.

Roslyn analyzers flag broken data sources, invalid hooks, and assertion mistakes before they become a red CI run.

Compile-time safetyActionable diagnostics
Modern everywhere03

Built for today’s .NET.

Native AOT, trimming, async assertions, Microsoft.Testing.Platform, and first-class integrations—without legacy baggage.

Native AOTMicrosoft.Testing.Platform
Proof, not promises

Built to keep
feedback fast.

Daily BenchmarkDotNet runs compare real test scenarios on the latest .NET SDK. Inspect every number and the methodology behind it.

Explore benchmarks
Massive parallel testslower is better ↓
TUnit AOT
218 ms
TUnit
469 ms
xUnit 3
2,927 ms
MSTest
2,982 ms

Ubuntu 24.04 · .NET SDK 10.0.302 · Updated daily

Ready when you are

Bring your tests.
Leave the baggage.

Starting fresh or migrating from xUnit, NUnit, or MSTest—there’s a clear path in.