Набор переменных среды в базовом тестовом классе недоступен в производных тестовых классах - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть базовый тестовый класс, в котором я устанавливаю переменную среды с именем ENVIRONMENT:

using NUnit.Framework;

internal abstract class BaseTestClass
{
    [OneTimeSetUp]
    public void InitializeBaseSuite()
    {
        System.Environment.SetEnvironmentVariable("ENVIRONMENT", "MyValue");
    }
}

И в производном тесте я инициализирую некоторый класс с именем TestTasks, который внутренне считывает эту переменную, чтобы узнать, какая среда ее Проблема заключается в том, что, если я инициализирую этот класс TestTasks следующим образом:

internal class TestClass : BaseTestClass
{
    private TestTasks Tasks { get; } = new TestTasks();
}

он не может найти и прочитать переменную (я поместил оператор отладки в конструктор TestTasks, чтобы увидеть, если он может прочитать переменную оттуда во время создания экземпляра).

Однако, если я делаю это так (и чего я действительно хочу избежать):

internal class TestClass : BaseTestClass
{
    private TestTasks Tasks => new TestTasks();
}

, это работает.

Почему он не может прочитать переменную при первой инициализации? И что я могу сделать, чтобы передать какое-то значение глобально из однократной настройки в базовом классе во все производные тестовые классы?

1 Ответ

2 голосов
/ 25 февраля 2020
private TestTasks Tasks => new TestTasks();

эквивалентно

private TestTasks Tasks { get { return new TestTasks(); } }

, таким образом, он будет создавать новый объект TestTasks каждый раз, когда вы пытаетесь получить это

, тогда как

private TestTasks Tasks { get; } = new TestTasks();

Создает список один раз, и конструктор TestTasks будет вызываться даже До конструктора объекта TestClass (и до вашего OneTimeSetup метода-члена), поэтому он будет вызываться перед вызовом для установки переменной среды.

Я предлагаю инициализировать ваше свойство Tasks другим OneTimeSetup методом ИЛИ (возможно), вы можете сделать свой метод InitializeBaseSuite stati c, что должно заставить его работать до инициализации свойства?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...