Latest upstream author date included at this registry's pinned revision.

csharp-xunit

Synced v1.1.0 License: MIT Source: github/awesome-copilot/skills/csharp-xunit Commit: 4742f26 Latest included change:

Get best practices for XUnit unit testing, including data-driven tests

Summary

Purpose
It explains conventions for structuring, organizing, and verifying xUnit unit tests, including assertions, shared test context, isolation, and categorization.
When to use
Use it when building or refining .NET unit tests and choosing how to structure individual or data-driven cases and shared test context.
Outputs
It provides guidance on test-project setup, Arrange-Act-Assert structure, facts and theories, data sources, fixtures, mocking, assertions, and diagnostics.
Upstream changes (7, latest included 2026-02-19)
caab1f6 Convert all prompts to skills and update plugin manifests Adds a csharp-xunit skill document with guidance on project setup, test structure, data-driven tests, assertions, mocking, and test organization.
2f9c96d Fix deprecated 'mode' attribute in prompt files by renaming to 'agent' (#441) Renames the front-matter field `mode` to `agent`, keeping its value as `agent`.
2b45ca4 feat: update deprecated tool names to namespaced versions (#365) Updates the prompt's tools list to use `search/codebase` instead of `codebase`.
69cd4fa update `editFiles` to `edit/editFiles` (#319) Updates the prompt's tools list to use `edit/editFiles` instead of `editFiles`.
6fb794b Update development instructions and guidelines (#29) Changes the front matter's `mode`, `tools`, and `description` values from double-quoted to single-quoted.
9872a77 Improving the tools for prompts Replaces the prompt's tools list with `changes`, `codebase`, `editFiles`, `problems`, and `search`.
4c8ad05 Initial setup of repo with prompts and instructions Adds the initial csharp-xunit prompt with guidance on project setup, test structure, data-driven tests, assertions, mocking, and test organization.
npx skills add "lettucebo/Skills#v2.2.0@csharp-xunit" --full-depth

⚠ Available after v2.2.0 is published

XUnit Best Practices

Your goal is to help me write effective unit tests with XUnit, 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, xunit, and xunit.runner.visualstudio 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

  • No test class attributes required (unlike MSTest/NUnit)
  • Use fact-based tests with [Fact] attribute for simple tests
  • Follow the Arrange-Act-Assert (AAA) pattern
  • Name tests using the pattern MethodName_Scenario_ExpectedBehavior
  • Use constructor for setup and IDisposable.Dispose() for teardown
  • Use IClassFixture<T> for shared context between tests in a class
  • Use ICollectionFixture<T> for shared context between multiple test classes

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 [Theory] combined with data source attributes
  • Use [InlineData] for inline test data
  • Use [MemberData] for method-based test data
  • Use [ClassData] for class-based test data
  • Create custom data attributes by implementing DataAttribute
  • Use meaningful parameter names in data-driven tests

Assertions

  • Use Assert.Equal for value equality
  • Use Assert.Same for reference equality
  • Use Assert.True/Assert.False for boolean conditions
  • Use Assert.Contains/Assert.DoesNotContain for collections
  • Use Assert.Matches/Assert.DoesNotMatch for regex pattern matching
  • Use Assert.Throws<T> or await Assert.ThrowsAsync<T> to test exceptions
  • Use fluent assertions library for more readable assertions

Mocking and Isolation

  • Consider using Moq or NSubstitute alongside XUnit
  • 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 [Trait("Category", "CategoryName")] for categorization
  • Use collection fixtures to group tests with shared dependencies
  • Consider output helpers (ITestOutputHelper) for test diagnostics
  • Skip tests conditionally with Skip = "reason" in fact/theory attributes

History

v1.0.0 bootstrap
v1.1.0 baseline-verified 4742f26
v1.1.0 license-refresh 4742f26