Csharp Nunit
GitHubOfficialOriginally contributed by @aaronpowell as prompts/csharp-nunit.prompt.md; moved into a skill by pull request #761Distributed by GitHub
- Skill
- Guidelines
- Software development
- MIT
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a structured reference for implementing unit tests with NUnit. It covers project organization, test structure, standard testing patterns, and advanced data-driven testing techniques. It also outlines preferred assertion styles, isolation strategies using mocks, and organizational attributes to maintain a clean and maintainable test suite.
What it does
- Defines naming conventions and project structure for NUnit test projects.
- Outlines the Arrange-Act-Assert pattern for consistent test method structure.
- Explains how to implement data-driven tests using attributes like TestCase and TestCaseSource.
- Provides guidance on using the constraint-based assertion model for clearer test intent.
- Offers best practices for test isolation and dependency mocking.
- Lists organizational attributes for categorizing and managing test execution.
When to use it
- When setting up a new NUnit test project in a .NET environment.
- When you need to refactor existing tests to follow industry-standard patterns.
- When implementing complex test cases that require data-driven inputs.
- When you need to improve the readability and maintainability of your test assertions.
Advantages
- Promotes consistent and readable test code across the development team.
- Reduces test fragility by encouraging independent and idempotent test design.
- Simplifies the creation of complex test scenarios through data-driven attributes.
- Provides clear guidance on modern NUnit assertion styles.
Usage examples
- “How should I structure a data-driven test for a calculator method?”
- The agent will explain using the [TestCase] attribute to pass multiple sets of inputs and expected results into a single test method, ensuring clean and concise code.
- “What is the recommended way to assert values in NUnit?”
- The agent will recommend using the Assert.That syntax with the constraint model (e.g., Assert.That(actual, Is.EqualTo(expected))) for better readability.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/github/csharp-nunit/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip csharp-nunit.zip -d .agents/skills
Documentation by aaronpowell
NUnit Best Practices
Your goal is to help me write effective unit tests with NUnit, covering both standard and data-driven testing approaches.
Project Setup
Use a separate test project with naming convention
[ProjectName].TestsReference Microsoft.NET.Test.Sdk, NUnit, and NUnit3TestAdapter packages
Create test classes that match the classes being tested (e.g.,
CalculatorTestsforCalculator)Use .NET SDK test commands:
dotnet testfor running tests
Test Structure
Apply
[TestFixture]attribute to test classesUse
[Test]attribute for test methodsFollow the Arrange-Act-Assert (AAA) pattern
Name tests using the pattern
MethodName_Scenario_ExpectedBehaviorUse
[SetUp]and[TearDown]for per-test setup and teardownUse
[OneTimeSetUp]and[OneTimeTearDown]for per-class setup and teardownUse
[SetUpFixture]for assembly-level setup and teardown
Standard Tests
Keep tests focused on a single behavior
Avoid testing multiple behaviors in one test method
Use clear assertions that express intent
Include only the assertions needed to verify the test case
Make tests independent and idempotent (can run in any order)
Avoid test interdependencies
Data-Driven Tests
Use
[TestCase]for inline test dataUse
[TestCaseSource]for programmatically generated test dataUse
[Values]for simple parameter combinationsUse
[ValueSource]for property or method-based data sourcesUse
[Random]for random numeric test valuesUse
[Range]for sequential numeric test valuesUse
[Combinatorial]or[Pairwise]for combining multiple parameters
Assertions
Use
Assert.Thatwith constraint model (preferred NUnit style)Use constraints like
Is.EqualTo,Is.SameAs,Contains.ItemUse
Assert.AreEqualfor simple value equality (classic style)Use
CollectionAssertfor collection comparisonsUse
StringAssertfor string-specific assertionsUse
Assert.Throws<T>orAssert.ThrowsAsync<T>to test exceptionsUse descriptive messages in assertions for clarity on failure
Mocking and Isolation
Consider using Moq or NSubstitute alongside NUnit
Mock dependencies to isolate units under test
Use interfaces to facilitate mocking
Consider using a DI container for complex test setups
Test Organization
Group tests by feature or component
Use categories with
[Category("CategoryName")]Use
[Order]to control test execution order when necessaryUse
[Author("DeveloperName")]to indicate ownershipUse
[Description]to provide additional test informationConsider
[Explicit]for tests that shouldn't run automaticallyUse
[Ignore("Reason")]to temporarily skip tests
Files
- ATTRIBUTION.mdAdded by AutoGineer1.1 KiB
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md2.8 KiB
Requirements and compatibility
Written for: GitHub Copilot
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Originally contributed by
@aaronpowellas prompts/csharp-nunit.prompt.mdmoved into a skill by pull request #761
- Publisher
- GitHub (Official)
- Distributed by
- GitHub
- Source
- github/awesome-copilot · skills/csharp-nunit · commit 797337f
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- aaronpowell, CypherHK, derekclair, jamesmontemagno
AutoGineer is not affiliated with or endorsed by aaronpowell or GitHub.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download csharp-nunit.zip