Nunit параметризованные TestFixtures с параметрами, установленными во время выполнения? - PullRequest
4 голосов
/ 31 августа 2010

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

В Nunit 2.5 они представили параметризованные тесты и тестовые фиксации.Это позволяет вам написать один тест и запустить его с несколькими входными данными, предоставленными с использованием атрибута TestCase, а также написать один тестовый класс и создать его несколько экземпляров с разными аргументами конструктора соответственно.

В дополнение к этому, онМожно создать несколько тестовых случаев на основе вывода свойства или метода, используя атрибут TestCaseSource.Это будет использовать выходные данные метода / свойства, которое реализует IEnumerable, чтобы создать набор тестовых случаев, по одному на объект в списке.Это то, что я хотел бы сделать, но на уровне прибора, а не на уровне теста.


Некоторые сведения о моем примере использования:

Я тестирую симуляциюпрограммное обеспечение и «среда моделирования», которая должна быть загружена (из сериализованного объекта), прежде чем можно будет запустить любое моделирование.Существует около 5 различных типов симов, поэтому в моем тестовом классе есть 5 методов тестирования (по одному для каждого типа сима).В настоящее время я использую наследование (вместо параметризованных приборов) для запуска тестовых случаев в нескольких (полдюжине или около того) средах моделирования, которые были взяты из производственных данных.

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

В идеале я хотел бы иметь один прибор для каждой среды моделирования и определить, сколько / сколько это во время выполнения.Я знаю, что могу сделать первое путем жесткого кодирования путей среды сима в 100+ атрибутов TestFixture, могу ли я сделать последнее?

1 Ответ

5 голосов
/ 02 сентября 2010

Я отправил по электронной почте список Nunit-Discuss об этом и получил следующий ответ от Чарли Пул Короче говоря, это пока невозможно, но рассматривается вопрос о будущих версиях Nunit.

Привет

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

Рассматривали ли вы использование универсального приспособление как обходной путь? Вы могли бы передать в среде как тип (или Типы) и любые аргументы конструктора в качестве нетиповых аргументов. Я не знаю ваше приложение, так что возьмите это с зерном соль, но как насчет чего-то вроде ...

[TestFixture(typeof(Environment1), 42, "string")]
public class TestClass<T>
{
    IEnvironment env;

    public TestClass(int n, string s)
    {
       env = new T( n, s);
    }
    ...

}

Обратите внимание, что это "maillistcode", поэтому может не работать : -)

Charlie

...