mcpField
N
nunit-skill

nunit-skill

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

nunit-skill について

nunit-skillは、C#開発者向けのNUnit 3テストリファレンススキルです。テスト構成、アサーション、ライフサイクルを扱い、発展的な実践ガイドも案内します。

主な機能

  1. 01NUnit 3のテストフィクスチャとライフサイクル
  2. 02制約モデルによるアサーション
  3. 03パラメーター化テスト
  4. 04Moqのモック例
  5. 05カテゴリ、無視、タイムアウト属性
  6. 06セットアップとテスト実行コマンド

活用シーン

  1. 01NUnitの制約モデルでアサーションを記述
  2. 02パラメーター化テストの構成
  3. 03テスト単位とフィクスチャ単位のセットアップ管理
  4. 04カテゴリでテスト実行を絞り込み

インストール

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

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

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

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

詳細

NUnit 3 テストスキル

基本パターン

基本的なテスト
using NUnit.Framework;

[TestFixture]
public class CalculatorTests
{
    private Calculator _calculator;

    [SetUp]
    public void SetUp() => _calculator = new Calculator();

    [Test]
    public void Add_TwoPositiveNumbers_ReturnsSum()
    {
        Assert.That(_calculator.Add(2, 3), Is.EqualTo(5));
    }

    [Test]
    public void Divide_ByZero_ThrowsException()
    {
        Assert.Throws<DivideByZeroException>(() => _calculator.Divide(10, 0));
    }

    [TearDown]
    public void TearDown() { /* cleanup */ }
}
制約モデル(Assert.That)
Assert.That(actual, Is.EqualTo(expected));
Assert.That(actual, Is.Not.EqualTo(unexpected));
Assert.That(value, Is.GreaterThan(5));
Assert.That(value, Is.InRange(1, 10));
Assert.That(str, Does.Contain("hello"));
Assert.That(str, Does.StartWith("He").IgnoreCase);
Assert.That(collection, Has.Count.EqualTo(3));
Assert.That(collection, Has.Member("item"));
Assert.That(collection, Is.All.GreaterThan(0));
Assert.That(obj, Is.Null);
Assert.That(obj, Is.Not.Null);
Assert.That(obj, Is.InstanceOf<MyClass>());
Assert.That(actual, Is.EqualTo(3.14).Within(0.01));
Assert.That(() => Method(), Throws.TypeOf<ArgumentException>()
    .With.Message.Contains("invalid"));
パラメーター化テスト
[TestCase(2, 3, 5)]
[TestCase(-1, 1, 0)]
[TestCase(0, 0, 0)]
public void Add_ReturnsCorrectSum(int a, int b, int expected)
{
    Assert.That(_calculator.Add(a, b), Is.EqualTo(expected));
}

[TestCaseSource(nameof(DivisionCases))]
public void Divide_ReturnsCorrectQuotient(int a, int b, double expected)
{
    Assert.That(_calculator.Divide(a, b), Is.EqualTo(expected).Within(0.01));
}

private static IEnumerable<TestCaseData> DivisionCases()
{
    yield return new TestCaseData(10, 2, 5.0).SetName("10/2=5");
    yield return new TestCaseData(7, 3, 2.33).SetName("7/3=2.33");
}
Moq によるモック
using Moq;

[TestFixture]
public class UserServiceTests
{
    private Mock<IUserRepository> _mockRepo;
    private Mock<IEmailService> _mockEmail;
    private UserService _service;

    [SetUp]
    public void SetUp()
    {
        _mockRepo = new Mock<IUserRepository>();
        _mockEmail = new Mock<IEmailService>();
        _service = new UserService(_mockRepo.Object, _mockEmail.Object);
    }

    [Test]
    public void CreateUser_SavesAndSendsEmail()
    {
        _mockRepo.Setup(r => r.Save(It.IsAny<User>())).Returns(new User { Id = 1 });

        var result = _service.CreateUser("[email protected]", "Alice");

        Assert.That(result.Id, Is.EqualTo(1));
        _mockRepo.Verify(r => r.Save(It.IsAny<User>()), Times.Once);
        _mockEmail.Verify(e => e.SendWelcome("[email protected]"), Times.Once);
    }
}
ライフサイクル
[OneTimeSetUp]    → Before all tests in fixture
[SetUp]           → Before each test
[Test]            → Test method
[TearDown]        → After each test
[OneTimeTearDown] → After all tests in fixture
カテゴリーと属性
[Test, Category("Smoke")]
public void QuickTest() { }

[Test, Ignore("Bug #123")]
public void SkippedTest() { }

[Test, Timeout(5000)]
public void TimeLimitedTest() { }

[Test, Retry(3)]
public void FlakyTest() { }
アンチパターン
悪い例良い例理由
Assert.AreEqual(a, b)(クラシック)Assert.That(a, Is.EqualTo(b))制約モデルの方が多機能です
[SetUp] がない適切なライフサイクルリソース管理
プライベートメソッドのテストパブリック API のテストカプセル化
カテゴリーがない[Category("Smoke")]サブセットを実行できます

セットアップ:dotnet add package NUnit NUnit3TestAdapter Microsoft.NET.Test.Sdk

実行:dotnet test または dotnet test --filter TestCategory=Smoke

応用パターン

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

コメント