Свойства теста NUnit недоступны в параметризованных тестах

Первоначально возникало при использовании TestCaseSource и атрибута пользовательского производного свойства. Вот дистиллированный пример:

[TestFixture]
public class SomeTestFixture
{
    [Test, Property("SomeProperty", "foo")]
    public void RegularTest()
    {
    }

    [Test, Property("SomeProperty", "foo"), TestCase(0)]
    public void ParametrizedTest(int x)
    {
    }

    [TearDown]
    public void TearDown()
    {
        var properties = TestContext.CurrentContext.Test.Properties;
    }
}

properties будет иметь "SomeProperty": "foo" при разрыве после RegularTest, но они будут пустыми после ParametrizedTest. Почему это так, и как я могу обойти это, кроме использования отражения?


person j4nw    schedule 22.11.2017    source источник


Ответы (1)


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

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

Если вы укажете тестовый пример с помощью TestCaseAttribute, вы не сможете добавить новое свойство, хотя вы можете указать некоторые известные свойства, такие как описание. Обходной путь заключается в использовании TestCaseSourceAttribute для указания случаев и предоставлении отдельных экземпляров TestCaseData для каждого случая. Класс TestCaseData позволяет вам устанавливать свойство для каждого случая.

По общему признанию, это не очень удобно, но это обходной путь.

person Charlie    schedule 22.11.2017