Параметризованный тест jUnit без смены бегуна - PullRequest
7 голосов
/ 21 декабря 2010

Есть ли чистый способ запуска параметризованных тестов jUnit 4 без смены бегуна, т.е. без использования @RunWith(Parameterized.class)

У меня есть модульные тесты, которые уже требуют специального бегуна, и я не могу заменить его на Parameterized. Может быть, есть какая-то «цепочка бегунов», чтобы я мог бегунов одновременно? (Просто дикая догадка ...)

Ответы [ 2 ]

4 голосов
/ 09 апреля 2011

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

Каркасэто CallbackParams - (http://callbackparams.org) - и это бегуны:

  • CallbackParamsRunner
  • BddRunner

Используя аннотацию фреймворка ...

  • @ WrappedRunner

... вы можете указать произвольного стороннего бегуна следующим образом:

@RunWith(CallbackParamsRunner.class) // or @RunWith(BddRunner.class)
@WrappedRunner(YourSpecialRunner.class)
public class YourTest {
...

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

Для вашего первогоВ тесте CallbackParams вы, вероятно, предпочли бы BddRunner, так как он требует меньше дополнительных вещей, но когда вы начинаете повторно использовать значения параметров между различнымиtest-классы, вероятно, вам лучше с CallbackParamsRunner, который требует более строгой проверки типов.

Также - с BddRunner у вас не должно быть никаких @ Test-методов.Вместо этого вы должны использовать аннотации фреймворка @Given, @When и @Then.Это требование иногда вступает в противоречие с требованиями стороннего бегуна, но обычно оно работает довольно хорошо.

Удачи!

0 голосов
/ 24 декабря 2010

org.junit.runners.Parameterized создается org.junit.internal.builders.AnnotatedBuilder механизмом отражения.Возможно, вы могли бы расширить Parameterized как своего собственного Runner: @RunWith ( MyParameterized .class).

...