簡體   English   中英

一次為所有單元測試初始化​​私有字段

[英]Initialize private field for all unit tests at once

無論如何,對於同一單元中的所有單元測試,我都可以一次初始化本地變量?

如果我使用[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");

    }
}

針對該問題的基於MS Test的標准解決方案是使用[ClassInitialize] 如果這樣做,您還需要將private變量更改為static

private static ElasticsearchClient _elasticClient;

或者,考慮使用(代替[ClassInitialize] ):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM