Best for
- Use when creating fixtures, wiring Testcontainers, or reducing flaky CI behavior.
vasilyu1983/AI-Agents-public/frameworks/shared-skills/skills/qa-testing-nunit/SKILL.md
Designs NUnit-based C# test suites for API, component, and integration coverage. Use when creating fixtures, wiring Testcontainers, or reducing flaky CI behavior.
Decision brief
Designs NUnit-based C# test suites for API, component, and integration coverage.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Declared | Source record | Install path and trigger |
| Claude Code | Declared | Source record | Install path and trigger |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/vasilyu1983/AI-Agents-public --skill "frameworks/shared-skills/skills/qa-testing-nunit"Inspect the Agent Skill "qa-testing-nunit" from https://github.com/vasilyu1983/AI-Agents-public/blob/53f6cb73ea53a2646e3e7d4665062ad66f3683ac/frameworks/shared-skills/skills/qa-testing-nunit/SKILL.md at commit 53f6cb73ea53a2646e3e7d4665062ad66f3683ac. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
1. Classify test scope: API, component, or integration. 2. Lock runtime constraints: Docker availability, framework target, and excluded suites. 3. Choose fixture pattern: one fixture per controller or handler family. 4. Wire dependencies: Testcontainers for databases, WireMock…
1. Define boundary, dependencies, expected assertion depth, and environment constraints. Load references/nunit-structure.md. If the request touches dotnet test, runner mode, adapters, or CLI flags, also load references/test-platform-modes.md. 2. Select fixture composition and li…
Classify test scope first: API, component, or integration.
Treat runner mode, package versions, analyzer behavior, adapter requirements, and CLI/coverage switches as volatile current-state facts.
NUnit Handler Fixture Template: base fixture for setup wiring and deterministic scenario configuration.
Permission review
The documentation includes network, browsing, or remote request actions.
[NUnit API Request Builder Template](assets/nunit-api-request-builder-template.cs): deterministic request builder for scenario setup.The documentation includes network, browsing, or remote request actions.
Use web search or web fetch to verify current external facts, versions, pricing, deadlines, regulations, or platform behavior before final answers.Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 96/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 82 | Source | Repository attention, not individual Skill quality |
| Compatibility | 2 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
code → build → dotnet test → fix → repeat.dotnet test, Microsoft.Testing.Platform, global.json, adapters, or coverage/logging switches, verify the repo's current runner mode first and use current primary sources from data/sources.json.<Feature>Fixture.cs and <Feature>Tests.cs.ApiTest.cs + ApiFixture.cs (split by scenario family only when needed).[FixtureLifeCycle(LifeCycle.InstancePerTestCase)] pairs with [Parallelizable]: NUnit's default SingleInstance lifecycle shares one fixture object across every test method, so instance fields become a race condition the moment two of its tests run concurrently. InstancePerTestCase gives each test its own instance, isolating instance-field state; it does not isolate static fields or external shared resources (containers, WireMock servers), which is why [OneTimeSetUp]/[OneTimeTearDown] must stay static under this lifecycle and shared runtime still needs its own reset discipline in [SetUp].[SetUp]; dispose all owned infra in [OneTimeTearDown].DatabaseLauncher + MigratorContainer pattern (see assets/nunit-database-launcher-template.cs); if the repo already has an established launcher/migrator helper, follow it instead of forking.migrateup -m /sql); avoid custom ready-check arguments inside tests — drive readiness from the container wait strategy.code -> build -> run tests -> fix -> repeat.[Test] + [TestCase] + [CancelAfter(...)] with method signature (string url, CancellationToken cancellationToken); keep [Test] together with [TestCase] to avoid NUnit analyzer issues.Assert.Multiple or Assert.EnterMultipleScope for related assertions, and use TestContext.Progress or fixture diagnostics when failures need more context.$software-csharp-backend.nuke/Build.cs, test runner selection, category target wiring, or CI artifact publication, switch to $ops-nuke-cicd.data/sources.json before recommending package changes or command-line flags.dotnet test, MTP, coverage, and CI wiring in $ops-nuke-cicd; keep this skill focused on fixture design and suite structure.references/nunit-structure.md. If the request touches dotnet test, runner mode, adapters, or CLI flags, also load references/test-platform-modes.md.references/fixture-pattern.md and references/testing-templates.md.references/api-testing-nunit.md or references/component-testing-nunit.md.references/dependency-strategy-matrix.md, then references/wiremock-setup.md or references/testcontainers-setup.md.references/async-eventual-assertions.md and references/assertions-and-diagnostics.md.references/anti-flakiness.md.references/ci-parallelism-sharding.md and references/infrastructure-troubleshooting.md.BuildAll, LocalUnitTest, ApiTest/DbTest as needed, then TestAll; use $ops-nuke-cicd for pipeline-target changes.$docs-codebase with migration matrix and feature trace templates.dotnet test, MTP, adapters, and repo-level CLI drift.TestCaseData source methods.WireMockServerWrapper and per-dependency *WiremockServer helper pattern.DatabaseLauncher, ordered migrator chain, optional migrator toggles, and startup verification hooks.NUnit testing request
-> Classify API, component, integration, or infrastructure-backed scope
-> Verify runner mode, target framework, Docker availability, and excluded suites
-> Choose fixture shape and dependency strategy: real, fake, WireMock, Testcontainers
-> Add deterministic Arrange/Act/Assert tests with rich diagnostics
-> Run dotnet build/test with targeted filters before widening
-> Fix flakes through isolation, readiness checks, and parallelism boundaries
## Workflow and ## Quick Reference for the baseline sequence## Resources and ## Templates for deeper materials## When Not to Use This Skill and ## Failure Triage for scope boundaries and symptom-first debugging## Related Skills for broader QA and .NET handoffs$qa-testing-strategy first, then return here for how to build it.dotnet test/MTP/VSTest runner-mode mismatch, coverage collector wiring, or CI target graph, not fixture/test code — use $ops-nuke-cicd; do not try to fix runner-mode drift by editing test files.$software-csharp-backend; writing tests around a bug is this skill's job, fixing the bug is not.$qa-testing-playwright or the relevant mobile/UI skill instead.references/anti-flakiness.md — do not keep guessing fixes; add diagnostics (correlation IDs, container/WireMock logs, timing) first, reproduce deterministically, and only then patch. Silently adding [Retry] to hide an unexplained flake is a regression, not a fix.| Symptom | Likely cause class | First move |
|---|---|---|
| Test passes alone, fails in full run | Shared mutable state or fixture lifecycle mismatch | Check [FixtureLifeCycle]/[Parallelizable] combination; confirm [SetUp] actually resets everything the failing test reads |
| Test passes locally, fails only in CI | Port collision, Docker host assumption (localhost vs remote Docker host), or resource contention under CI parallelism | Check for hard-coded ports/hosts (references/anti-flakiness.md, references/testcontainers-setup.md); reduce parallelism for the failing category as a diagnostic, not a permanent fix |
| Intermittent timeout on eventually-consistent assertions | Fixed sleep instead of polling, or timeout too tight for CI-under-load | Replace with the polling template in references/async-eventual-assertions.md; widen timeout only after confirming the condition is correct, not to paper over a race |
dotnet test silently discovers 0 tests after an upgrade | Adapter major version mismatched to MTP generation, or mixed VSTest/MTP in one solution | Check adapter ↔ MTP ↔ TFM matrix in references/test-platform-modes.md before touching test code |
| Coverage report is empty or missing after enabling MTP | coverlet.collector/coverlet.msbuild left in place (VSTest-only, silently no-ops under MTP) | Swap to coverlet.MTP or Microsoft.Testing.Extensions.CodeCoverage per references/test-platform-modes.md |
| Migrator-dependent test fails with a missing-table error | Migrator ordering issue, not a test bug | Check references/infrastructure-troubleshooting.md migrator-ordering section before adding retries or longer timeouts |
| Skill | Purpose |
|---|---|
| software-csharp-backend | Backend service implementation |
| ops-nuke-cicd | NUKE pipeline targets and CI wiring |
dev-structured-logs | Structured logging migration |
| qa-testing-strategy | Risk-based test strategy |
| qa-testing-playwright | Browser/E2E suites (out of scope here) |
Before applying this skill on a non-trivial task, read learnings.consolidated.md in this directory (and learnings.md if present).
After applying it, if you encountered a pattern worth remembering, a mistake worth preventing, or a domain fact that surprised you, append one dated bullet to learnings.md via agents-skills-feedback-loop/scripts/append_learning.py. Do not modify SKILL.md itself.
Frequently asked questions
Designs NUnit-based C# test suites for API, component, and integration coverage.
The source record exposes this install command: npx skills add https://github.com/vasilyu1983/AI-Agents-public --skill "frameworks/shared-skills/skills/qa-testing-nunit". Inspect the command and pinned source before running it.
The pinned source record declares support for: codex, claude code.
Static rules flagged network in the source; the page lists the matching lines and excerpts.
Alternatives
PramodDutta/qaskills
Optimize resumes for Applicant Tracking Systems, check ATS compatibility, and analyze keyword match
vasilyu1983/AI-Agents-public
Guides iOS testing with XCTest, XCUITest, Swift Testing, simctl, and xcresult. Use when choosing destinations, controlling flakes, or parsing test artifacts for native apps.
samber/cc-skills-golang
Production-ready Golang tests — table-driven tests, testify suites and mocks, parallel tests, fuzzing, fixtures, goroutine leak detection with goleak, snapshot testing, code coverage, integration tests, idiomatic test naming. Use when writing or reviewing Go tests, choosing a testing approach, setting up Go test CI, or debugging flaky/slow tests. For testify-specific APIs see `samber/cc-skills-golang@golang-stretchr-testify`; for measurement methodology see `samber/cc-skills-golang@golang-benchm
samber/cc-skills-golang
Troubleshoot Golang programs systematically - find and fix the root cause. Use when encountering bugs, crashes, deadlocks, or unexpected behavior in Go code. Covers debugging methodology, common Go pitfalls, test-driven debugging, pprof setup and capture, Delve debugger, race detection, GODEBUG tracing, and production debugging. Start here for any 'something is wrong' situation. Not for interpreting profiles or benchmarking (→ See `samber/cc-skills-golang@golang-benchmark` skill) or applying opt