csharp-xunit

โดย github

คู่มือการทดสอบ XUnit ครอบคลุม facts มาตรฐาน, theories ที่ขับเคลื่อนด้วยข้อมูล, และแนวปฏิบัติที่ดีที่สุด ครอบคลุมโครงสร้างการทดสอบโดยใช้รูปแบบ Arrange-Act-Assert, หลักการตั้งชื่อ, และการตั้งค่า/ล้างข้อมูลตาม fixture ด้วย IClassFixture<T> และ ICollectionFixture<T> อธิบายการทดสอบที่ขับเคลื่อนด้วยข้อมูลด้วย [Theory] ร่วมกับ [InlineData], [MemberData], และ [ClassData] รวมถึงการสร้าง custom data attribute รายละเอียดวิธีการยืนยันสำหรับความเท่าเทียม, คอลเลกชัน, รูปแบบ regex, และข้อยกเว้น...

npx skills add https://github.com/github/awesome-copilot --skill csharp-xunit

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

Skills เพิ่มเติมจาก github

debugging-workflows
github
คู่มือการดีบัก GitHub Agentic Workflows - การวิเคราะห์ล็อก การตรวจสอบการรัน และการแก้ไขปัญหา
go-codemod
github
ใช้และทดสอบการปรับเปลี่ยนโค้ด Go สำหรับคำสั่ง gh aw fix
acreadiness-policy
github
ช่วยผู้ใช้เลือก เขียน หรือใช้ AgentRC policy นโยบายปรับแต่งการให้คะแนนความพร้อมโดยปิดการตรวจสอบที่ไม่เกี่ยวข้อง เปลี่ยนระดับผลกระทบ/ระดับ การตั้งค่า…
ai-ready
github
ทำให้ repo ใดๆ พร้อมสำหรับ AI — วิเคราะห์โค้ดเบสของคุณและสร้าง AGENTS.md, copilot-instructions.md, ขั้นตอนการทำงาน CI, เทมเพลต issue และอื่นๆ ขุดรีวิว PR ของคุณ…
create-oo-component-documentation
github
สร้างเอกสารประกอบที่ครอบคลุมและเป็นมาตรฐานสำหรับคอมโพเนนต์เชิงวัตถุตามแนวทางปฏิบัติที่ดีที่สุดในอุตสาหกรรมและมาตรฐานเอกสารทางสถาปัตยกรรม
dependabot
github
Dependabot เป็นเครื่องมือจัดการ dependencies ในตัวของ GitHub ที่มีความสามารถหลักสามประการ:
doublecheck
github
ไปป์ไลน์การตรวจสอบสามชั้นสำหรับผลลัพธ์ของ AI แยกข้อความที่สามารถตรวจสอบได้ ค้นหาแหล่งข้อมูลที่สนับสนุนหรือขัดแย้งผ่านการค้นหาเว็บ ดำเนินการตรวจสอบเชิงโต้แย้ง…
foundry-agent-sync
github
สร้างและซิงโครไนซ์เอเจนต์ AI ที่ใช้พรอมพ์โดยตรงภายใน Azure AI Foundry ผ่าน REST API จากไฟล์ JSON ในเครื่อง ซึ่งแตกต่างจากสกิลโครงสร้างพื้นฐานที่ทำได้เพียง...