【问题标题】:Initialize private field for all unit tests at once一次为所有单元测试初始化​​私有字段
【发布时间】:2018-06-24 14:25:09
【问题描述】:

我是否可以在同一个类中为所有单元测试初始化​​一次局部变量?

如果我使用[TestInitialize()],每个单元测试都会初始化一次,类似地,如果我使用构造函数,每个测试都会调用一次。

我想用[ClassInitialize()],但是这个方法必须是静态的,不能访问私有字段。

[TestClass()]
public sealed class ElasticsearchTest
{
    private ElasticsearchClient _elasticClient;

    [ClassInitialize()]
    public static void ClassInit()
    {
        // cannot do this... visual studio error: 
        // An object reference is required for the non-static field, method or property
        _elasticClient = new ElasticsearchClient("http://localhost:9200", true);
    }

    [TestInitialize()]
    public void TestInit()
    {
        // this initialization happens once for each test
        _elasticClient = new ElasticsearchClient("http://localhost:9200", true);
    }

    [TestMethod()]
    public void Test1()
    {
        var res = _elasticClient.SearchDocuments("table");
    }

    [TestMethod()]
    public void Test2()
    {
        var res = _elasticClient.SearchDocuments("chair");

    }
}

【问题讨论】:

标签: c# unit-testing


【解决方案1】:

基于 MS 测试的标准解决方案是使用 [ClassInitialize]。如果这样做,您还需要将private 变量更改为static

private static ElasticsearchClient _elasticClient;

或者,考虑使用(而不是[ClassInitialize]):

private static ElasticsearchClient _elasticClient = new ElasticsearchClient("http://localhost:9200", true);

【讨论】:

    猜你喜欢
    • 2022-01-15
    • 2016-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多