{
    "title": "Context - xUnit.net",
    "useMathjax": false
}

================================================================================

TestSuite

  • 複数の Assert を1つのテストメソッドにまとめる。
  • それらのテストメソッドを1つのクラスにまとめる。(TestSuite
  • このテストの間で共通に使いまわしたいリソースの管理方法を紹介する。

Constructor と Dispose

  • テストクラスのコンストラクタで前処理を行う。(SetUp に相当)
  • IDisposable インターフェースの Dispose メソッドで後始末を行う(TreatDown に相当)
  • テストクラス内で使いまわしたいリソースは、メンバーとして宣言し、コンストラクタで初期化し、 Dispose で破棄する
public class Tests : IDisposable
{
    public Tests()
    {
        // テスト前の処理
    }

    public void Dispose()
    {
        // テスト後の処理
    }
}

Class Fixtures

  • 一つのデータを複数のテストクラスで共有する方法
  • 全てのテストの前に前準備 (SetUp) を行い、全てのテストが終わったら後始末 (TreatDown) したい場合に使用する。

手順

  1. データを保持するクラスを作成する
    • コンストラクタで初期化して、 IDisposableDispose で破棄処理を行う
  2. データを利用するテストクラスを作成する
    • IClassFixture<T> を継承する
    • IClassFixture<T> の型引数に、さっき作ったデータクラスを入れる
    • さっき作ったデータクラスを一つ受け取るコンストラクタを作成する
    • コンストラクタで受け取ったデータをメンバーに格納して、各テストメソッドから利用する
      • コンストラクタで渡される値が、テストクラス間で共通に利用できるシングルトンになっている
/// <summary>
/// テスト用のデータを格納するクラス
/// </summary>
public class TestFixture : IDisposable
{
    public TestFixture()
    {
        // Context の初期化処理
    }

    public void Dispose()
    {
        // Context の終了処理
    }
}


/// <summary>
/// テスト用のデータを実際に利用する側のクラス
/// </summary>
public class Tests : IClassFixture<TestFixture>
{
    TestFixture fixture;

    public Tests(TestFixture fixture)
    {
        // テスト用 Context のシングルトンがここの引数で渡される。
        this.fixture = fixture;
    }

    // テストをいつも通り書く
}

参考資料