Chisle
The coding-agent plugin that bills 52% of a bare model across 20 live tasks. Terse persona + tool-output compressor + context diet.
翻訳待ち
A modern, fast and flexible .NET testing framework
翻訳待ち
開発ツールC# · PowerShellGitHub @thomhurst自分でインストール所有者未確認
Paste into Claude or ChatGPT for installation instructions suited to your environment.
Have you tried it? One tap is enough. No sign-in needed.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A modern .NET testing framework. Tests are discovered at compile time via source generators, run in parallel by default, and work under Native AOT — all built on Microsoft.Testing.Platform.
[Test]
[Arguments("GOLD", 100.00, 80.00)]
[Arguments("SILVER", 100.00, 90.00)]
public async Task Discount_Is_Applied(string tier, double subtotal, double expected)
{
var checkout = new CheckoutService();
var total = await checkout.ApplyDiscountAsync(tier, subtotal);
await Assert.That(total).IsEqualTo(expected);
}
If using TUnit Assertions, when a test fails, TUnit tells you what happened — including the actual expression you wrote:
Expected to be 80
but found 100
at Assert.That(total).IsEqualTo(expected)
Comparing objects? Instead of dumping two object graphs at you, TUnit pinpoints the difference:
Expected to be equal to Employee { FirstName = "Victoria", LastName = "Apanii", Age = 30 }
but differs at member FirstName: expected "Victoria" but found "ictoria"
at Assert.That(actualEmployee).IsEqualTo(expectedEmployee)
[DependsOn], [NotInParallel], and [ParallelLimiter<T>] give you precise ordering and throttling when you need it.Source generation shifts work from run time to build time: you pay a little up front at build, and every test run after that starts faster — dramatically so under Native AOT. The same test suites, run on every framework:
| Scenario | TUnit (AOT) | xUnit v3 (AOT) | TUnit | xUnit v3 | NUnit | MSTest |
|---|---|---|---|---|---|---|
| Data-driven tests | 16.91 ms | 22.10 ms | 311.73 ms | 444.83 ms | 419.76 ms | 331.58 ms |
| Async-heavy tests | 116.3 ms | 119.8 ms | 366.2 ms | 529.8 ms | 513.7 ms | 457.1 ms |
| Matrix combinations | 161.5 ms | 266.9 ms | 426.9 ms | 673.4 ms | 1,377.7 ms | 1,296.2 ms |
| Large suites (scale) | 14.58 ms | 22.85 ms | 336.89 ms | 479.92 ms | 482.72 ms | 327.76 ms |
| Massive parallelism | 365.4 ms | 675.1 ms | 646.9 ms | 1,113.7 ms | 1,063.4 ms | 2,786.7 ms |
| Setup/teardown lifecycle | 99.37 ms | 174.36 ms | 413.55 ms | 626.85 ms | 1,033.38 ms | 978.96 ms |
Mean wall-clock time to run the same test suite. TUnit (AOT) 1.84.0 · xUnit v3 (AOT) 4.0.3 · TUnit 1.84.0 · xUnit v3 4.0.3 · NUnit 5.0.0 · MSTest 4.5.3. .NET SDK 11.0.100, .NET 11.0.0 (11.0.0, 11.0.26.53018), X64 RyuJIT x86-64-v4. Updated 2026-11-12 — regenerated weekly by the Speed Comparison workflow. Full results and methodology: tunit.dev/docs/benchmarks.
dotnet new install TUnit.Templates
dotnet new TUnit -n "MyTestProject"
cd MyTestProject
dotnet run
dotnet add package TUnit
Getting Started Guide · Migration Guides
[Test]
[Arguments("[email protected]", "ValidPassword123")]
[Arguments("[email protected]", "AdminPass789")]
public async Task User_Login_Succeeds(string email, string password) { ... }
// Matrix — generates a test for every combination (9 total here)
[Test]
[MatrixDataSource]
public async Task Database_Operations_Work(
[Matrix("Create", "Update", "Delete")] string operation,
[Matrix("User", "Product", "Order")] string entity) { ... }
Need more? [MethodDataSource] pulls rows from a method, and custom DataSourceGenerator<T> attributes let you build your own sources.
Assertions are async, chainable, and produce the focused failure messages shown above:
await Assert.That(response.StatusCode).IsEqualTo(HttpStatusCode.OK)
.Because("the health endpoint should always be up");
await Assert.That(order.Items)
.Count().IsEqualTo(3)
.And.Contains(item => item.Sku == "ABC-123");
Defining your own assertion is one attribute on a plain method — TUnit generates the fluent extension for you:
[GenerateAssertion]
public static bool IsPositive(this int value) => value > 0;
// Now available on Assert.That:
var account = new { Balance = 1 };
await Assert.That(account.Balance).IsPositive();
Inject anything into your test classes with [ClassDataSource<T>]. Implement IAsyncInitializer for async setup, IAsyncDisposable for teardown, and pick a sharing scope — None, PerClass, PerAssembly, PerTestSession, or Keyed:
This is the beginning of the README. Read the rest at the original. Read the full README ↗