Как запустить методы тестирования в определенном порядке в JUnit4? - PullRequest
382 голосов
/ 12 сентября 2010

Я хочу выполнить методы тестирования, которые отмечены @Test в определенном порядке.

Например:

public class MyTest {
    @Test public void test1(){}
    @Test public void test2(){}
}

Я хочу убедиться, что test1() выполняется до test2() каждый раз, когда я запускаю MyTest, но я не мог найти аннотацию, такую ​​как @Test(order=xx).

Я думаю, что это очень важная функция для JUnit, если автор JUnit не хочет функцию заказа , почему?

Ответы [ 17 ]

2 голосов
/ 24 октября 2012

См. Мое решение здесь: «Junit и Java 7».

В этой статье я опишу, как запускать тесты Junit по порядку - «как в исходном коде».Тесты будут запущены, чтобы ваши методы тестирования появились в файле класса.

http://intellijava.blogspot.com/2012/05/junit-and-java-7.html

Но, как сказал Паскаль Тивент, это не очень хорошая практика.

0 голосов
/ 17 марта 2019

С помощью JUnit 5.4 вы можете указать порядок:

@Test
@Order(2)
public void sendEmailTestGmail() throws MessagingException {

вам просто нужно аннотировать свой класс

@TestMethodOrder(OrderAnnotation.class)

https://junit.org/junit5/docs/current/user-guide/#writing-tests-test-execution-order

Я использую это в своем проекте, и он работает очень хорошо!

0 голосов
/ 04 августа 2018

Вы можете использовать один из следующих кодов:

@FixMethodOrder(MethodSorters.JVM)OR `@FixMethodOrder(MethodSorters.DEFAULT)` OR `@FixMethodOrder(MethodSorters.NAME_ASCENDING)` before your test class like this:


@FixMethodOrder(MethodSorters.NAME_ASCENDING)


public class BookTest { ...}
0 голосов
/ 01 ноября 2017

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

Я знаю, что это не полностью связано с этим вопросом, но, возможно, может помочь в определении правильной проблемы

0 голосов
/ 11 марта 2014

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

Так что просто назовите ваши тесты в алфавитном порядке, который вы хотите.Также обратите внимание, что название теста должно начинаться со слова test.Просто следите за числами

test12 будет запущен перед test2

, поэтому:

testA_MyFirstTest testC_ThirdTest testB_ATestThatRunsSecond

0 голосов
/ 25 апреля 2016

Вот расширение к JUnit, которое может производить желаемое поведение: https://github.com/aafuks/aaf-junit

Я знаю, что это противоречит авторам философии JUnit, но при использовании JUnit в средах, которые не являются строгими модульными тестами (как практикуется на Java) это может быть очень полезно.

0 голосов
/ 30 апреля 2015

Пожалуйста, проверьте это: https://github.com/TransparentMarket/junit. Он запускает тест в том порядке, в котором они указаны (определенные в скомпилированном файле класса). Также он включает в себя пакет AllTests для запуска тестов, определенных в подпакете. Используя реализацию AllTests, можно расширить решение, также фильтруя свойства (мы использовали аннотации @Fast, но они еще не были опубликованы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...