c# - 运行具有公共(public)连接对象和不同连接状态的单元测试用例

标签 c# xunit fixture

我正在使用 xUnit 1.9 运行一堆测试用例,它们都共享同一个资源连接,但它们分为三个不同的类别,要求连接处于三个不同的状态。

我创建了一个处理连接的 fixture 类和三个不同的类来保存需要三种不同连接状态的三类测试用例。

现在我相信 fixture 对象只创建一次,通过构造函数只连接一次,最后通过 Dispose 方法只断开连接一次。我没听错吗?

我如何才能为每个类(方法组)设置一次连接状态,而不是每次都为每个方法设置状态(通过将代码添加到每个类构造函数)?

伪代码:

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();

    ...
}

最佳答案

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);
        }
    }
}

关于c# - 运行具有公共(public)连接对象和不同连接状态的单元测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36638569/

相关文章:

c# - 如何重叠两个控件

c# - 仅打开特定图像到图片框而不打开文件对话框

c# - 音频源无法播放Unity3d?

c# - 单元测试 : try statement in program. cs Main

unit-testing - XUnit 是否跨测试类共享 fixture 实例?

python - Google App Engine 的固定装置

C# 工具提示显示持续时间

javascript - Mocha 在完成所有测试之前结束测试运行

python - 是否可以仅在所有参数运行后才运行拆卸 fixture ?

django - 你如何将文件放入 Django 的 fixture 中?