導入
実務では自作Assertではなく、xUnit(またはNUnit/MSTest)というテストフレームワークを使います。Visual StudioやCI(自動ビルド)と統合され、テストの一覧・実行・集計を自動化します。記法を読めるようにしましょう。
図解
flowchart LR
T["[Fact] メソッド<br/>1つのテストケース"] --> RUN["dotnet test"]
RUN --> RES["緑(成功) / 赤(失敗)を集計"]
サンプル
xUnitの実際の記法は次の形です(ローカルのVisual Studioでdotnet testにより実行します)。
// --- xUnit のテストコード(読み物) ---
// using Xunit;
//
// public class CalculatorTests
// {
// [Fact] // [Fact] = 1つのテストケース
// public void Add_2と3_5になる()
// {
// var result = Calculator.Add(2, 3);
// Assert.Equal(5, result); // 期待値, 実際の値
// }
//
// [Theory] // [Theory] = 複数データで同じテスト
// [InlineData(2, 3, 5)]
// [InlineData(-1, 1, 0)]
// public void Add_複数パターン(int a, int b, int expected)
// {
// Assert.Equal(expected, Calculator.Add(a, b));
// }
// }
// ブラウザではこの考え方を素のAssertで再現する
Assert(Add(2, 3) == 5, "2+3=5");
Console.WriteLine("OK");
int Add(int a, int b) => a + b;
void Assert(bool c, string n) { if (!c) throw new Exception($"FAIL: {n}"); }
[Fact]は1つのテストケース、[Theory]+[InlineData]は複数データでの反復テストAssert.Equal(期待値, 実際の値)で検証する- ローカルでは
dotnet new xunitでテストプロジェクトを作りdotnet testで一括実行する
演習
// xUnitの Assert.Equal に相当する検証を素のC#で
Assert(Max(3, 8) == 8, "max(3,8)=8");
Console.WriteLine("OK");
// TODO: 2つのうち大きい方を返す Max を実装し、テストを通してください
void Assert(bool c, string n) { if (!c) throw new Exception($"FAIL: {n}"); }
___
- 期待される出力:
OK
ヒント1を見る
int Max(int a, int b) => a > b ? a : b;
ヒント2を見る
三項演算子で大きい方を返します
まとめ
- xUnitは
[Fact]/[Theory]でテストを書くフレームワーク Assert.Equal(期待, 実際)で検証- ローカルでは
dotnet testで一括実行する
次回: 仕様変更に強いことを体感するTDD実践です。