.NET テスト (xUnit)

1 概要

xUnit.net は .NET 向けの単体テストフレームワークです。[Fact] 属性でテストメソッドを定義し、Assert クラスのメソッドで期待値を検証します。dotnet test コマンドでテストを実行でき、GitHub Actions などの CI 環境とも容易に統合できます。

このリポジトリの .NET プロジェクト (prod/calc.net/) に対するテストは、xUnit を使用して実装します。CalcLib が内部で呼び出す C ライブラリ (P/Invoke 経由) の動作を .NET レイヤーから検証することが目的です。

.NET テストを理解することで、C ライブラリの .NET ラッパーが正しく動作しているかを自動的に確認できるようになります。テスト結果は GitHub Actions で自動実行され、PR のマージ判断に活用されます。

2 習得目標

3 学習マテリアル

3.1 公式ドキュメント

3.2 日本語コンテンツ

4 このリポジトリとの関連

4.1 使用箇所 (具体的なファイル・コマンド)

CalcLib のテストコード例:

using Xunit;
using CalcLib;

public class CalcLibraryTests
{
    [Fact]
    public void Add_TwoPositiveNumbers_ReturnsSum()
    {
        var lib = new CalcLibrary();
        var result = lib.Calculate(CalcKind.Add, 3, 4);
        Assert.Equal(7, result.Value);
    }

    [Theory]
    [InlineData(1, 2, 3)]
    [InlineData(-1, -2, -3)]
    [InlineData(0, 5, 5)]
    public void Add_VariousInputs_ReturnsCorrectSum(int a, int b, int expected)
    {
        var lib = new CalcLibrary();
        var result = lib.Calculate(CalcKind.Add, a, b);
        Assert.Equal(expected, result.Value);
    }

    [Fact]
    public void Divide_ByZero_ThrowsCalcException()
    {
        var lib = new CalcLibrary();
        Assert.Throws<CalcException>(() => lib.Calculate(CalcKind.Divide, 1, 0));
    }
}

テストの実行:

dotnet test prod/calc.net/test/CalcLibTest/CalcLibTest.csproj

.csproj でのテストプロジェクト設定:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <IsPackable>false</IsPackable>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.*" />
    <PackageReference Include="xunit" Version="2.*" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.*" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="../../libsrc/CalcLib/CalcLib.csproj" />
  </ItemGroup>
</Project>

4.2 関連ドキュメント