Как говорится в названии, я ищу простой способ запускать тесты JUnit 4.x несколько раз подряд автоматически с помощью Eclipse.
Например, один и тот же тест будет выполняться 10 раз подряд и сообщать результат.
У нас уже есть сложный способ сделать это, но я ищу простой способ сделать это, чтобы быть уверенным, что нестабильный тест, который я пытался исправить, остается исправленным.
Идеальным решением будет плагин / настройка / функция Eclipse, о которых я не знаю.
Ответы:
Самый простой (как минимум необходимый объем нового кода) способ сделать это - запустить тест как параметризованный (пометить
@RunWith(Parameterized.class)
и добавить метод для предоставления 10 пустых параметров). Таким образом, фреймворк выполнит тест 10 раз.Этот тест должен быть единственным тестом в классе, или, лучше сказать, все методы тестирования должны выполняться в классе 10 раз.
Вот пример:
С вышесказанным можно даже сделать это с помощью конструктора без параметров, но я не уверен, предполагали ли это авторы фреймворка или это сломается в будущем.
Если вы реализуете свой собственный бегун, то вы можете запустить тест 10 раз. Если вы используете сторонний бегун, то с 4.7 вы можете использовать новую
@Rule
аннотацию и реализоватьMethodRule
интерфейс так, чтобы он принимал оператор и выполнял его 10 раз в цикле for. Текущий недостаток такого подхода в том, что@Before
и@After
запускается только один раз. Скорее всего, это изменится в следующей версии JUnit (@Before
будет запускаться после@Rule
), но независимо от того, что вы будете действовать с одним и тем же экземпляром объекта (что не относится кParameterized
бегуну). Это предполагает, что любой бегун, с которым вы запускаете класс, правильно распознает@Rule
аннотации. Это только в том случае, если он делегируется исполнителям JUnit.Если вы работаете с настраиваемым бегуном, который не распознает
@Rule
аннотацию, то вам действительно приходится писать собственный бегун, который надлежащим образом делегирует этому бегуну и запускает его 10 раз.Обратите внимание, что есть и другие способы решения этой проблемы (например, бегун Theories), но все они требуют бегуна. К сожалению, JUnit в настоящее время не поддерживает уровни бегунов. Это бегун, который сковывает других бегунов.
источник
С IntelliJ вы можете сделать это из тестовой конфигурации. Открыв это окно, вы можете запускать тест любое количество раз.
когда вы запустите тест, intellij выполнит все выбранные вами тесты указанное вами количество раз.
Пример выполнения 624 тестов 10 раз:
источник
Я обнаружил, что аннотация повторения Spring полезна для таких вещей:
Последний документ (Spring Framework 4.3.11.RELEASE API):
источник
На основе следующих ресурсов:
пример
Создайте и используйте
@Repeat
аннотацию следующим образом:Repeat.java
RepeatRule.java
PowerMock
Использование этого решения с
@RunWith(PowerMockRunner.class)
требует обновления до Powermock 1.6.5 (который включает патч ).источник
С JUnit 5 я смог решить эту проблему с помощью аннотации @RepeatedTest :
Обратите внимание, что
@Test
аннотацию не следует использовать вместе с@RepeatedTest
.источник
Что-то не так с:
В отличие от случая, когда вы тестируете каждый из массивов значений, вам не особенно важно, какой прогон завершился неудачно.
Не нужно делать в конфигурации или аннотации то, что можно делать в коде.
источник
@Before
аннотированного метода доitWorks()
решения моей проблемы.Для меня это работает намного проще.
источник
public class RepeatRunner extends BlockJUnit4ClassRunner { public RepeatRunner(Class klass) throws InitializationError { super(klass); } @Override public void run(final RunNotifier notifier) { for (int i = 0; i < 10; i++) { super.run(notifier); } } }
хотя, по крайней мере, в подключаемом модуле Eclipse JUnit вы получаете такие результаты, как: «10/1 тесты пройдены»В библиотеке tempus-fugit есть аннотация Intermittent, которая работает с JUnit 4.7,
@Rule
чтобы повторить тест несколько раз или с@RunWith
.Например,
После запуска теста (с IntermittentTestRunner в
@RunWith
)testCounter
будет равно 99.источник
Я создаю модуль, позволяющий проводить такие тесты. Но не только в повторении. Но чтобы гарантировать, что какой-то фрагмент кода является потокобезопасным.
https://github.com/anderson-marques/concurrent-testing
Зависимость от Maven:
Пример использования:
Это проект с открытым исходным кодом. Не стесняйтесь совершенствоваться.
источник
Вы можете запустить тест JUnit из основного метода и повторять его столько раз, сколько вам нужно:
источник
По сути, это ответ, который Ишай дал выше, переписанный на Котлине:
источник