2

xUnit 1.9 を使用して、リソースへの同じ接続をすべて共有する一連のテスト ケースを実行していますが、それらは 3 つの異なるカテゴリに分類され、接続が 3 つの異なる状態になる必要があります。

接続を処理する 1 つのフィクスチャ クラスと、3 つの異なる接続状態を必要とする 3 つのカテゴリのテスト ケースを保持する 3 つの異なるクラスを作成しました。

ここで、フィクスチャ オブジェクトが 1 回だけ作成され、コンストラクターを介して 1 回だけ接続され、Dispose メソッドを介して最後に 1 回だけ切断されることを信頼します。私はそれを正しく理解していますか?

メソッドごとに毎回状態を設定するのではなく、クラス (メソッドのグループ) ごとに 1 回だけ接続状態を設定するにはどうすればよいですか (コードを各クラス コンストラクターに追加することによって)。

ダミーコード:

public class Fixture : IDispose
{
    public Fixture() { connect(); }
    public void Dispose() { disconnect(); }
    public void SetState1();
    public void SetState2();
    public void SetState3();
}

public class TestCasesForState1 : IUseFixture<Fixture>
{
    public void SetFixture(fix) { fix.SetState1() } // will be called for every test case. I'd rather have it being called once for each group

    [Fact]
    public void TestCase1();

    ...
}

public class TestCasesForState2 : IUseFixture<Fixture>
{
    public void SetFixture(fix) { fix.SetState2() } // will be called for every test case. I'd rather have it being called once for each group

    [Fact]
    public void TestCase1();

    ...
}

public class TestCasesForState3 : IUseFixture<Fixture>
{
    public void SetFixture(fix) { fix.SetState3() } // will be called for every test case. I'd rather have it being called once for each group

    [Fact]
    public void TestCase1();

    ...
}
4

1 に答える 1

1
public class Fixture : IDispose {

    public Fixture() { connect(); }

    public void Dispose() { disconnect(); }

    static bool state1Set;
    public void SetState1() {
        if(!state1Set) {
            state1Set = true;
            //...other code
            changeState(1);
        }
    }

    static bool state2Set;
    public void SetState2() {
        if(!state2Set) {
            state2Set = true;
            //...other code
            changeState(2);
        }
    }

    static bool state3Set;
    public void SetState3() {
        if(!state3Set) {
            state3Set = true;
            //...other code
            changeState(3);
        }
    }
}
于 2016-04-18T21:51:00.200 に答える