Подтвердить что ты не робот

Как сделать тестовые примеры JUnit для выполнения в последовательном порядке?

Я использую JUnit4.

У меня есть набор тестовых методов в тестовом примере.

Каждый тестовый метод вставляет некоторые записи и проверяет результат теста и, наконец, удаляет введенные записи.

Так как JUnit работает параллельно, методы тестирования терпят неудачу из-за некоторых записи, присутствующие во время выполнения предыдущего тестового метода. Эта происходит только в моей машине-коллеге (Windows 7), а не в моей машине (Cent OS 6).

Нам нужно, чтобы тестовые методы проходили на всех наших машинах.

Я попытался очистить записи в методе Setup(), но снова работает только на моей машине. Есть ли в JUnit возможность использовать методы тестирования в едином последовательном порядке?

Спасибо,

4b9b3361

Ответ 1

JUnit 4.11 теперь поддерживает указание порядка выполнения с помощью @FixMethodOrder аннотация.

Ответ 2

MethodSorters - новый класс, представленный после выпуска Junit 4.6. Этот класс объявил три типа порядка выполнения, которые могут использоваться в ваших тестовых случаях при их выполнении.

  • NAME_ASCENDING (MethodSorters.NAME_ASCENDING). Сортирует методы тестирования. по имени метода, в лексикографическом порядке.

  • JVM (null). Оставляет методы тестирования в порядке, возвращаемом JVM. Обратите внимание, что порядок от JVM my варьируется от run to run.

  • DEFAULT (MethodSorter.DEFAULT). Сортирует методы тестирования в детерминированный, но не предсказуемый, порядок.

.

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

//Running test cases in order of method names in ascending order

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class OrderedTestCasesExecution {

    @Test
    public void secondTest() {
        System.out.println("Executing second test");
    }

    @Test
    public void firstTest() {
        System.out.println("Executing first test");
    }

    @Test
    public void thirdTest() {
        System.out.println("Executing third test");
    }
}

Вывод:

Executing first test
Executing second test
Executing third test

Ссылка: http://howtodoinjava.com/2012/11/24/ordered-testcases-execution-in-junit-4/

Ответ 3

Заказ JUnit не гарантируется.

Причиной этого является то, что модульные тесты должны быть атомарными - все настройки должны происходить в методах установки/срыва, но не в других тестах.

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

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

Ответ 4

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

Решение: не запускайте свои тесты параллельно. JUnit не запускает тесты параллельно по умолчанию, поэтому либо вы устанавливаете параметр в maven, либо используете один из параллельных участников в JUnit.

Если у вас по-прежнему возникают проблемы между неудачами тестов в Windows, но не в Cent OS, возможно, это проблема с порядком выполнения, который вам нужно исправить. См. Мой ответ на Помог ли JUnit4 поддерживать заказ теста? Преднамеренно?.

Способ вокруг (по крайней мере, в терминах JUnit) заключается в удалении зависимостей между тестами. В принципе, JUnit не поддерживает заказы, и тесты должны быть запущены в любом порядке.

Если вам действительно нужны зависимости между тестами, используйте TestNG, где вы можете иметь зависимости.

Ответ 5

Нет проблем с запуском тестов параллельно, даже если в нем есть свой уровень данных. Но вам нужно иметь дополнительную работу для создания MOCK UP для ваших данных, чтобы он не попадал в базу данных. Вы можете использовать различные структуры макета, такие как Mockito, EasyMock и Arquillian.