NUnit глобальная SetupFixture не выполняется - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь выполнить некоторый код перед всеми тестами - даже более конкретно - даже перед оценкой всех источников тестовых примеров.

Предполагаемое для работы решение не выполняет код (точка останова попадает после оценки источников контрольных примеров):

[SetUpFixture]
public class GlobalSetup
{
    [OneTimeSetUp]
    public void Setup()
    {
        // Unfortunately does stuff after TestCaseSources
    }
}

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

[TestFixture]
public class GlobalSetup
{
    //Step 1
    static GlobalSetup ()
    {
        // Does stuff before every other TestCaseSource
    }

    //Step 3
    [Test, TestCaseSource (nameof (GlobalSetup.TestInitializerTestCaseData))]
    public void Setup () { }

    //Step 2
    public static IEnumerable TestInitializerTestCaseData => new[] { new TestCaseData () };
}

Как правильно не использовать этот обходной путь?

1 Ответ

0 голосов
/ 07 марта 2019

Как отмечается в комментариях к проблеме, на которую ссылается Pablo notPicasso, вы пытаетесь использовать NUnit таким образом, чтобы он не был предназначен для использования. Разумеется, возможна глобальная настройка, но она выполняется до всех других тестовых выполнений . Источники тестовых наборов оцениваются как часть обнаружения теста , которое должно быть завершено до начала выполнения любого теста.

Обычно можно использовать глобальные настройки, уменьшив объем работы, выполняемой в вашем TestCaseSource. В любом случае это желательно - TestCaseSource всегда должен быть максимально легким.

В вашем примере не указано, что именно вы пытаетесь сделать до загрузки тестов. Если вы добавите больше информации, я могу уточнить этот ответ. Между тем, вот несколько примеров ...

Если ваш TestCaseSource создает экземпляры тестируемых объектов , не делайте этого . Вместо этого инициализируйте параметры, такие как строки и целые, которые будут использоваться в SetUp или OneTimeSetup для ваших тестов.

Если ваш TestCaseSource инициализирует базу данных , не делайте этого . Вместо этого сохраните параметры, необходимые для инициализации базы данных, и сделайте это в OneTimeSetUp на некотором уровне в иерархии тестов.

Надеюсь, вы поняли идею ... или предоставили дополнительную информацию о том, что вы делаете.

Выбранный обходной путь выглядит так, как будто он будет работать в текущей реализации. Тем не менее, это зависит от точного, неуказанного порядка, в котором NUnit работает внутри. Это может легко перестать работать в будущем выпуске.

...