Выберите порядок выполнения тестов JUnit - PullRequest
9 голосов
/ 19 апреля 2010

Я хотел выбрать порядок выполнения тестов JUnit. У меня есть 4 класса с несколькими тестовыми методами, моя цель - выполнить, например, метод Y класса A, затем метод X из класса B и, наконец, метод Z из класса A.

Не могли бы вы помочь?

Ответы [ 7 ]

19 голосов
/ 10 апреля 2014

Начиная с версии 4.11, вы можете указать порядок выполнения, используя аннотации и порядок по имени метода:

import org.junit.Test;
import org.junit.FixMethodOrder;
import org.junit.runners.MethodSorters;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyTest {

    @Test
    public void test1Create() {
        System.out.println("first");
    }

    @Test
    public void test2Update() {
        System.out.println("second");
    }
}

См. Примечания к выпуску JUnit 4.11

18 голосов
/ 19 апреля 2010

Как правило, вы не можете указать порядок, в котором выполняются отдельные модульные тесты (хотя вы можете указать приоритеты в TestNG и иметь разные приоритеты для каждого теста). Тем не менее, модульные тесты должны выполняться изолированно, поэтому порядок тестов не должен иметь значения. Это плохая практика. Если вам нужно, чтобы тесты были в определенном порядке, вы должны переосмыслить свой дизайн. Если вы опубликуете конкретную информацию о том, почему вам нужен заказ, я уверен, что мы можем предложить предложения.

3 голосов
/ 19 апреля 2010

Ответ JUnit на этот вопрос заключается в создании одного метода теста, подобного следующему:

  @Test public void testAll() {
       classA.y();
       classB.x();
       classA.z();
  }

Это, очевидно, неудовлетворительный ответ в некоторых случаях (где настройка и разбор имеют значение), но JUnit рассматривает юнит-тестирование так: если тесты не независимы, вы делаете что-то не так.

Если вышеперечисленное не соответствует вашим потребностям, взгляните на TestNG.

2 голосов
/ 09 апреля 2014

Общее замечание / идея о том, что тестирование может быть выполнено в любом произвольном порядке, слишком сильное.

Это действительно зависит от того, что вы тестируете.

Например, я тестирую сервер, на котором у нас есть действие changePassword.

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

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

2 голосов
/ 19 апреля 2010

Создайте TestSuite и вызовите методы тестирования в нужном порядке. @ Yishai прав в том, что JUnit разработан таким образом, чтобы каждый тест был независимым. Поэтому, если вы вызываете методы тестирования, которые могут запускаться независимо, тогда не должно быть проблем с созданием TestSuite для покрытия сценария для определенного порядка вызовов.

0 голосов
/ 07 сентября 2010

Это может быть вам интересно: JExample

Другой подход к тестированию с помощью взаимозависимых тестов.

0 голосов
/ 19 апреля 2010

Если предыдущий ответ не удовлетворяет, я заметил, что с Sun JVM JUnit всегда выполняет модульные тесты в порядке, в котором они определены. Очевидно, что на это не стоит полагаться.

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