csharp-tunit

Installation
Summary

Best practices for writing unit tests with TUnit, including data-driven and advanced testing patterns.

  • Use [Test] attribute for test methods; follow Arrange-Act-Assert pattern with naming convention MethodName_Scenario_ExpectedBehavior
  • Data-driven testing via [Arguments], [MethodData], and [ClassData] attributes; multiple [Arguments] can apply to the same method
  • Fluent async assertions with await Assert.That() syntax; chain with .And or .Or operators and use .Within() for tolerance comparisons
  • Lifecycle hooks at multiple scopes: [Before/After(Test)], [Before/After(Class)], and [Before/After(Assembly)] for flexible setup and teardown
  • Advanced features include [Repeat(n)], [Retry(n)], [Timeout], [ParallelLimit<T>], and [DependsOn] for test control; parallel execution enabled by default
SKILL.md

TUnit Best Practices

Your goal is to help me write effective unit tests with TUnit, covering both standard and data-driven testing approaches.

Project Setup

  • Use a separate test project with naming convention [ProjectName].Tests
  • Reference TUnit package and TUnit.Assertions for fluent assertions
  • Create test classes that match the classes being tested (e.g., CalculatorTests for Calculator)
  • Use .NET SDK test commands: dotnet test for running tests
  • TUnit requires .NET 8.0 or higher

Test Structure

  • No test class attributes required (like xUnit/NUnit)
  • Use [Test] attribute for test methods (not [Fact] like xUnit)
  • Follow the Arrange-Act-Assert (AAA) pattern
  • Name tests using the pattern MethodName_Scenario_ExpectedBehavior
  • Use lifecycle hooks: [Before(Test)] for setup and [After(Test)] for teardown
Related skills

More from github/awesome-copilot

Installs
8.4K
GitHub Stars
32.8K
First Seen
Feb 25, 2026