Запустите одни и те же тесты для нескольких ICollectionFixture в xUnit - PullRequest
0 голосов
/ 10 января 2020

Мне любопытно, есть ли решение для запуска одних и тех же тестов для нескольких ICollectionFixture с. Вроде бы InlineData, но по всему тестовому классу, а не только по методу.

Мне нужна эта функциональность, потому что я хочу посмотреть, проходят ли тесты для разных конфигураций (коммутатор или строка подключения), которые устанавливаются в ICollectionFixture.

Например У меня есть следующие приборы:

public abstract class BaseTestConfigurationFixture : ConfigurationFixture<BaseTestConfigurationFixture>
{
    public BaseTestConfigurationFixture(bool shouldConfigure)
    {
        /// Configure 
    }
}

public class TestConfigurationFixtureVersionA : ConfigurationFixture<TestConfigurationFixtureVersionA>
{
    public TestConfigurationFixtureVersionA()
        : base(false)
    { }
}

public class TestConfigurationFixtureVersionB : ConfigurationFixture<TestConfigurationFixtureVersionB>
{
    public TestConfigurationFixtureVersionB()
        : base(true)
    { }
}

Теперь я использую эти приборы в следующих коллекциях:

public abstract class BaseTestEnvironmentCollection : ICollectionFixture<BaseTestConfigurationFixture>
{
    // This class has no code, and is never created. Its purpose is simply
    // to be the place to apply [CollectionDefinition] and all the
    // ICollectionFixture<> interfaces.     
}

[CollectionDefinition(nameof(TestEnvironmentCollectionVersionA))]
public class TestEnvironmentCollectionVersionA: ICollectionFixture<TestConfigurationFixtureVersionA>
{
    // This class has no code, and is never created. Its purpose is simply
    // to be the place to apply [CollectionDefinition] and all the
    // ICollectionFixture<> interfaces.     
}

[CollectionDefinition(nameof(TestEnvironmentCollectionVersionB))]
public class TestEnvironmentCollectionVersionB: ICollectionFixture<TestConfigurationFixtureVersionB>
{
    // This class has no code, and is never created. Its purpose is simply
    // to be the place to apply [CollectionDefinition] and all the
    // ICollectionFixture<> interfaces.     
}

Я хочу, чтобы мои тесты запускались один раз с конфигурациями из TestEnvironmentCollectionVersionA и затем с конфигурациями из TestEnvironmentCollectionVersionB.

мне также нужно получить доступ к BaseTestConfigurationFixture внутри моего тестового класса. Похоже, это вызывает проблемы, потому что, если я аннотирую тестовый класс только с одним из своих сборочных приборов, [Collection(nameof(TestEnvironmentCollectionVersionA))], я получаю следующую ошибку:

Сообщение: следующие параметры конструктора сделали нет соответствующих данных прибора: BaseTestConfigurationFixture testConfigurationFixture

Эта ошибка не появляется, если я использую только один TestFixture и CollectionFixture, без наследования.

Я вижу, что существует ограничение на [CollectionAttribute], чтобы не принимать несколько таких атрибутов.

Какой метод следует использовать для достижения этой функциональности?

Спасибо!

РЕДАКТИРОВАНИЕ: Найдено исправление для ошибки, приведенной ниже

Следующие параметры конструктора не имеют соответствующих данных осветителей: BaseTestConfigurationFixture testConfigurationFixture

...