mcpField
X
xunit-skill

xunit-skill

github.com/lambdatestテスト・品質384213 回インストール2 週間前に更新
リポジトリ

xunit-skill について

xunit-skillは、C#でxUnit.netテストを作成・実行するためのリファレンススキルです。基本的なテストパターン、アサーション、共有フィクスチャ、クリーンアップのほか、デバッグとCI/CDのガイドを扱います。

主な機能

  1. 01Factとパラメーター化Theoryテスト
  2. 02一般的なアサーションパターン
  3. 03IClassFixtureによるコンテキスト共有
  4. 04テストごとのセットアップとクリーンアップ
  5. 05応用パターンとデバッグ資料

活用シーン

  1. 01C#メソッドのパラメーター化テスト作成
  2. 02複数のテストクラスでデータベースコンテキストを共有
  3. 03各テストで使用リソースを確実にクリーンアップ
  4. 04dotnet testでテストを実行または絞り込み

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/lambdatest/agent-skills --skill xunit-skill

インストール後、Claude Code で/xunit-skillを入力して読み込まれたか確認します。

同梱ファイルreference/advanced-patterns.mdreference/playbook.md

詳細

xUnit.net テストスキル

コアパターン

基本的なテスト
using Xunit;

public class CalculatorTests
{
    private readonly Calculator _calc = new();

    [Fact]
    public void Add_TwoPositiveNumbers_ReturnsSum()
    {
        Assert.Equal(5, _calc.Add(2, 3));
    }

    [Fact]
    public void Divide_ByZero_ThrowsException()
    {
        Assert.Throws<DivideByZeroException>(() => _calc.Divide(10, 0));
    }
}
理論(パラメーター化)
[Theory]
[InlineData(2, 3, 5)]
[InlineData(-1, 1, 0)]
[InlineData(0, 0, 0)]
public void Add_ReturnsCorrectSum(int a, int b, int expected)
{
    Assert.Equal(expected, _calc.Add(a, b));
}

[Theory]
[MemberData(nameof(GetTestData))]
public void Add_WithMemberData(int a, int b, int expected)
{
    Assert.Equal(expected, _calc.Add(a, b));
}

public static IEnumerable<object[]> GetTestData()
{
    yield return new object[] { 1, 2, 3 };
    yield return new object[] { -1, -1, -2 };
}

[Theory]
[ClassData(typeof(CalculatorTestData))]
public void Add_WithClassData(int a, int b, int expected)
{
    Assert.Equal(expected, _calc.Add(a, b));
}
アサーション
Assert.Equal(expected, actual);
Assert.NotEqual(unexpected, actual);
Assert.True(condition);
Assert.False(condition);
Assert.Null(obj);
Assert.NotNull(obj);
Assert.Contains("sub", str);
Assert.DoesNotContain("x", str);
Assert.Empty(collection);
Assert.Single(collection);
Assert.Collection(list,
    item => Assert.Equal("first", item),
    item => Assert.Equal("second", item));
Assert.IsType<MyClass>(obj);
var ex = Assert.Throws<ArgumentException>(() => Method());
Assert.Equal("message", ex.Message);
Assert.InRange(value, 1, 10);
共有コンテキスト(IClassFixture)
public class DatabaseFixture : IDisposable
{
    public DbConnection Connection { get; }
    public DatabaseFixture() { Connection = new DbConnection("test"); }
    public void Dispose() { Connection.Close(); }
}

public class UserTests : IClassFixture<DatabaseFixture>
{
    private readonly DatabaseFixture _fixture;
    public UserTests(DatabaseFixture fixture) { _fixture = fixture; }

    [Fact]
    public void GetUser_ReturnsUser()
    {
        var user = _fixture.Connection.Query<User>("SELECT * FROM Users LIMIT 1");
        Assert.NotNull(user);
    }
}
コンストラクター/Dispose(テストごとのセットアップ)
public class MyTests : IDisposable
{
    private readonly MyService _service;
    public MyTests() { _service = new MyService(); }   // SetUp
    public void Dispose() { _service.Cleanup(); }       // TearDown

    [Fact]
    public void TestSomething() { Assert.True(_service.IsReady); }
}
アンチパターン
悪い例良い例理由
パラメーター付きの [Fact][Theory] + [InlineData]xUnit の規約
静的な状態IClassFixtureテストの分離
IDisposable を実装しないクリーンアップのために実装するリソース管理

セットアップ:dotnet add package xunit xunit.runner.visualstudio Microsoft.NET.Test.Sdk

実行:dotnet test または dotnet test --filter "FullyQualifiedName~Calculator"

詳細なパターン

高度なパターン、デバッグガイド、CI/CD 統合、ベストプラクティスについては、 reference/playbook.md を参照してください。

コメント