From asynkron-devtools
Detects and isolates flaky, hanging, crashing .NET tests with timeouts, OOM/stack overflow handling, history tracking via Asynkron.TestRunner. Use for unstable dotnet test suites.
npx claudepluginhub asynkron/asynkron-skills --plugin asynkron-devtoolsThis skill uses the workspace's default tool permissions.
This tool requires .NET 10+ SDK (for `dnx` support).
Detects .NET test platforms (VSTest/MTP) and frameworks (MSTest/xUnit/NUnit/TUnit), runs tests with dotnet test, applies filters, troubleshoots execution failures.
Detects and troubleshoots flaky tests in Jest and pytest suites. Provides guidance, code, configs for unit/integration testing, mocking, and stability.
Defines .NET testing strategies and patterns using xUnit v3 (Facts, Theories, fixtures), WebApplicationFactory/Testcontainers integration, Verify snapshots, Playwright E2E, BenchmarkDotNet, Coverlet coverage, and Stryker mutation testing.
Share bugs, ideas, or general feedback.
This tool requires .NET 10+ SDK (for dnx support).
Check if dnx is available:
dnx --help
If dnx is not available, the user needs .NET 10 SDK or later. dnx ships with the SDK — it does not need separate installation.
Asynkron.TestRunner is an alternative .NET test runner that wraps dotnet test with added resilience:
This is NOT a replacement for dotnet test. Use it only when standard tooling fails — flaky suites, hanging tests, crashes, OOM, stack overflow, or when you need isolation and regression tracking.
dnx runs .NET tools from source without installing them, similar to npx:
dnx Asynkron.TestRunner [arguments]
On first run, dnx will prompt to download the package. Use --yes to skip the prompt in CI.
Run all tests with hang detection:
dnx Asynkron.TestRunner
Filter by class or namespace:
dnx Asynkron.TestRunner "MyTestClass"
dnx Asynkron.TestRunner "MyNamespace.Integration"
Custom dotnet test command:
dnx Asynkron.TestRunner -- dotnet test ./tests/MyProject
List tests without running:
dnx Asynkron.TestRunner list
View test history and trends:
dnx Asynkron.TestRunner stats
Compare last two runs for regressions:
dnx Asynkron.TestRunner regressions
Manual isolation (find the culprit test):
dnx Asynkron.TestRunner isolate
Clear all history:
dnx Asynkron.TestRunner clear
| Flag | Default | Purpose |
|---|---|---|
-t, --timeout <seconds> | 20 (run), 30 (isolate) | Per-test timeout |
--timeout 0 | — | Disable hang detection |
-p, --parallel [N] | — | Run N test batches concurrently |
--parallel (no value) | — | Auto-detect and use CPU core count |
When a hang is detected:
This catches tests that hang, crash the process, cause OOM, or stack overflow — scenarios where dotnet test simply dies or never returns.
History is stored in .testrunner/ directory, indexed by:
Different filters and repos maintain independent histories for accurate regression detection.
Use Asynkron.TestRunner instead of dotnet test when:
For normal, healthy test suites — just use dotnet test.
dotnet test first — only reach for testrunner when it failsisolate to pinpoint the exact test causing crashes or hangsstats and regressions to track flaky test patterns over time--parallel for faster isolation on large test suites