Nunit3 как изменить имя тестового набора на основе параметров, переданных из TestFixtureSource

Я использую NUnit 3.0 и TestFixtureSource для многократного запуска тестовых примеров внутри прибора с разными параметрами / конфигурациями (я действительно хочу сделать это на уровне TestFixture). Простой пример:

[TestFixtureSource(typeof (ConfigurationProvider))]
public class Fixture
{
    public Fixture(Configuration configuration)
    {
        _configuration = configuration;
    }

    private Configuration _configuration;

    [Test]
    public void Test()
    {
        //do something with _configuration
        Assert.Fail();
    }
}

Допустим, Test () не работает для одной из конфигураций и успешно работает для другой. В файле отчета о выполнении и в обозревателе тестов Visual Studio имя как для неудачного, так и для успешного выполнения будет отображаться как просто Test (), что ничего не говорит мне о том, какая установка вызвала проблемы.

Есть ли способ повлиять на имена тестовых примеров в этой ситуации (то есть префикс его имени для каждого запуска / конфигурации прибора)? В качестве обходного пути я в настоящее время печатаю вывод результатов перед запуском каждого тестового примера, но Я бы предпочел этого не делать.

Поскольку NUnit 3.0 находится в стадии бета-тестирования и эта функция является довольно новой, я не смог ничего найти в документации. Я нашел TestCaseData, но пока не думаю, что он предназначен для использования с приборами (он предназначен для тестовых случаев).


person wade    schedule 15.09.2015    source источник


Ответы (2)


Я не могу найти способ изменить имя теста, но в этом нет необходимости, потому что NUnit3 создает имя теста, включая описание тестового набора.

Пример класса Fixture из вопроса можно использовать без изменений, если Configuration и ConfigurationProvider имеют такую ​​реализацию:

public class Configuration
{
    public string Description { get; }

    public Configuration(string description)
    {
        Description = description;
    }

    public override string ToString()
    {
        return Description;
    }
}

public class ConfigurationProvider : IEnumerable
{
    public IEnumerator GetEnumerator()
    {
        yield return new Configuration("Foo");
        yield return new Configuration("Bar");
        yield return new Configuration("Baz");
    }
}

«Уловка» состоит в том, чтобы убедиться, что параметр-конструктор прибора является строкой или имеет ToString-метод, который дает разумное описание прибора.

Если вы используете тестовый адаптер NUnit 3 в Visual Studio, то тестовые приспособления будут отображаться как Fixture(Foo), Fixture(Bar) и Fixture(Baz), чтобы вы могли легко различать их тесты. Xml-вывод nunit3-console.exe также использует описательные имена, fx: fullname=MyTests.Fixture(Bar).Test

<test-case id="0-1003" name="Test" fullname="MyTests.Fixture(Bar).Test" methodname="Test" classname="MyTests.Fixture" runstate="Runnable" result="Failed" ... >
    <failure>
        <message><![CDATA[]]></message>
        <stack-trace><![CDATA[at MyTests.Fixture.Test() in ... ]]></stack-trace>
    </failure>
    ...
</test-case>

Использование тестового адаптера NUnit 3 в Visual Studio

person Daniel Brixen    schedule 17.02.2017

Один из способов выполнения таких действий - это поиск и замена токенов в исходном коде и динамическое построение тестовых библиотек перед выполнением с помощью командной строки msbuild. Шаги высокого уровня

  1. Определите имена тестовых примеров как sometest_TOKEN в исходном коде, а затем используйте инструменты командной строки, такие как fnr.exe ответьте _TOKEN чем хотите. Например, sometest_build2145.
  2. Скомпилируйте dll с помощью msbuild, например, msbuild / t: REbuild mytestproj.sln. После этого выполните все тестовые примеры в mytestproj.dll.
person SACn    schedule 24.02.2017