Nunit: [Порядок] не допускает дублирования в TestFixtures, дефект документации?

Созданный на 9 окт. 2018  ·  4Комментарии  ·  Источник: nunit/nunit

Согласно документации: https://github.com/nunit/docs/wiki/Order-Attribute

Атрибут OrderAttribute может быть помещен в тестовый метод или фикстуру, чтобы указать порядок, в котором выполняются тесты.

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

Рассмотрим следующие случаи TextFixture

[TestFixture("A", false)]
[TestFixture("B", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]

Это кажется мне скорее дефектом документации/понимания, чем чем-либо еще, но то, как в связанном документе указано «_или приспособление_», подразумевает, что я мог написать

[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]

Когда на самом деле это ошибка компилятора для 1, 2 и 3

Повторяющийся атрибут "Заказ"

Однако было бы неплохо, если бы это интуитивно работало с дубликатами.

Все 4 Комментарий

@Aarskin Это помогает как нам (разработчикам NUnit), так и пользователям, если обсуждение одной проблемы ведется в рамках одной проблемы gitHub.

Вариант, который вы описываете здесь, в основном такой же, как на # 3055. То есть это...

[TestFixture("A", false), Order(0)]
[TestFixture("B", false), Order(1)]
[TestFixture("A", true), Order(2)]
[TestFixture("B", true), Order(3)]

все равно, как если бы вы написали...

[TestFixture("A", false)]
[TestFixture("A", true)]
[TestFixture("B", true)]
[TestFixture("B", false)]
[Order(3)]
[Order(2)]
[Order(1)]
[Order(0)]

а также любой другой порядок восьми атрибутов, которые вы хотите использовать. Все четыре атрибута TestFixture помещаются в один и тот же класс, в результате чего NUnit создает экземпляр этого класса четыре раза. Четыре атрибута Order также помещаются в один и тот же класс, вызывая конфликт, поскольку тест может иметь только один порядок.

Это __не__ ограничение NUnit. Так работает синтаксис атрибутов C#. Следует отметить два ключевых момента:

  1. Любой атрибут в квадратных скобках применяется к следующему элементу кода, который может принимать атрибут. В данном случае это класс.

  2. Последовательность атрибутов в квадратных скобках, например [A, B, C], имеет точно такое же значение, как и та же последовательность в отдельных парах скобок, например [A] [B] [C].

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

Это можно преобразовать в разрешение свойства/параметра Order в TestFixture , но прежде чем мы это рассмотрим, не могли бы вы дать нам пример использования? Обычно Order используется для запуска интеграционных тестов в последовательности, когда вы выполняете части более длительной операции по порядку в своих тестах. Параметризованный TestFixture обычно используется для тестирования одних и тех же тестов с разными входными данными. Я не могу придумать сценарий, в котором вы хотели бы сделать это в определенном порядке.

Мой вариант использования - это логический бизнес-регрессионный тест, а свойство/параметр в TestFixture я не могу приказать разбить так, как я хочу использовать NUnit. Больше, чем раньше, эти фреймворки используются не только для модульного тестирования.

В качестве обходного пути вы можете переключиться на TestFixtureSource вместо нескольких атрибутов TestFixture . При наличии только одного TestFixtureSourceAttribute фикстуры будут запускаться в том порядке, в котором вы возвращаете для них данные.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги