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 のマージ判断に活用されます。
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>