Azureの小ネタ (改)

~Azureネタを中心に、色々とその他の技術的なことなどを~

xUnit で共通コンテキストを利用する

私的備忘録。

クラスで共通なコンテキストを扱いたいときは、IClassFixtureを使う。

  • IDisposableを実装したFixtureクラスを作る。デフォルトコンストラクタで初期化、Disposeで終了処理を記述しとく
  • 利用側では、IClassFixture な形で実装しておくと、
  • コンストラクタにFixtureクラスを書いてインジェクトされる。
    public class T1Fixture : IDisposable
    {
        public T1Fixture()
        {
        }

        public void Dispose()
        {
        }
    }
    public class T2Fixture : IDisposable
    {
        public T2Fixture()
        {
        }

        public void Dispose()
        {
        }
    }

    public class UnitTest1 : IClassFixture<T1Fixture>, IClassFixture<T2Fixture>
    {
        private readonly T1Fixture _t1;
        private readonly T2Fixture _t2;
        private readonly ITestOutputHelper _output;

        public UnitTest1(T1Fixture t1, T2Fixture t2, ITestOutputHelper output)
        {
            _t1 = t1;
            _t2 = t2;
            _output = output;
        }
        [Fact]
        public void Test1()
        {
            Assert.NotNull(_t1);
            Assert.NotNull(_t2);
            _output.WriteLine("OK");
        }
    }

元ネタは以下です。

Shared Context between Tests > xUnit.net