Generated banner for Csharp Nunit
Generated logo for Csharp Nunit

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

From the author

Get best practices for NUnit unit testing, including data-driven tests
— the description by aaronpowell

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

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/github/csharp-nunit/download
  2. Unzip 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].Tests

  • Reference Microsoft.NET.Test.Sdk, NUnit, and NUnit3TestAdapter packages

  • Create test classes that match the classes being tested (e.g., CalculatorTests for Calculator)

  • Use .NET SDK test commands: dotnet test for running tests

Test Structure

  • Apply [TestFixture] attribute to test classes

  • Use [Test] attribute for test methods

  • Follow the Arrange-Act-Assert (AAA) pattern

  • Name tests using the pattern MethodName_Scenario_ExpectedBehavior

  • Use [SetUp] and [TearDown] for per-test setup and teardown

  • Use [OneTimeSetUp] and [OneTimeTearDown] for per-class setup and teardown

  • Use [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 data

  • Use [TestCaseSource] for programmatically generated test data

  • Use [Values] for simple parameter combinations

  • Use [ValueSource] for property or method-based data sources

  • Use [Random] for random numeric test values

  • Use [Range] for sequential numeric test values

  • Use [Combinatorial] or [Pairwise] for combining multiple parameters

Assertions

  • Use Assert.That with constraint model (preferred NUnit style)

  • Use constraints like Is.EqualTo, Is.SameAs, Contains.Item

  • Use Assert.AreEqual for simple value equality (classic style)

  • Use CollectionAssert for collection comparisons

  • Use StringAssert for string-specific assertions

  • Use Assert.Throws<T> or Assert.ThrowsAsync<T> to test exceptions

  • Use 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 necessary

  • Use [Author("DeveloperName")] to indicate ownership

  • Use [Description] to provide additional test information

  • Consider [Explicit] for tests that shouldn't run automatically

  • Use [Ignore("Reason")] to temporarily skip tests

Files

ATTRIBUTION.md

Attribution

This folder is an unmodified copy of the Agent Skill "csharp-nunit", distributed by AutoGineer (https://autogineer.com/agent-skills).

The skill's own files are unmodified copies. AutoGineer is not affiliated with or endorsed by the author or the publisher.

Files added by AutoGineer

  • ATTRIBUTION.md: this file, written by AutoGineer

  • LICENSE: copied from LICENSE

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
GitHub avatar of aaronpowell@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