Инициализировать приватное поле для всех модульных тестов одновременно - PullRequest
0 голосов
/ 24 июня 2018

В любом случае я мог бы инициализировать свою локальную переменную один раз для всех модульных тестов в одном и том же классе?

Если я использовал [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");

    }
}

1 Ответ

0 голосов
/ 24 июня 2018

Стандартным решением этой проблемы на основе MS Test является использование [ClassInitialize].Если вы сделаете это, вам также потребуется изменить переменную private на static:

private static ElasticsearchClient _elasticClient;

В качестве альтернативы рассмотрите возможность использования (вместо [ClassInitialize]):

private static ElasticsearchClient _elasticClient = new ElasticsearchClient("http://localhost:9200", true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...