本文へスキップ
BecomeCoder

C#デザインパターンコース · 第2章 TDD ― テスト駆動開発 · レッスン15

xUnitの記法

ブラウザで完結

導入

実務では自作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実践です。

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

C# — ブラウザ内で実行

ブラウザ内でC#を動かす環境を読み込みます(初回のみ数秒)。
スクロールして表示された時点でも自動で読み込まれます。