Запуск того же теста JUnit несколько раз с разными данными

Есть ли способ сказать JUnit для запуска определенного тестового примера несколько раз с разными данными непрерывно, прежде чем перейти к следующему тестовому примеру?

Ответ 1

взгляните на junit 4.4 теории:

import org.junit.Test;
import org.junit.experimental.theories.*;
import org.junit.runner.RunWith;

@RunWith(Theories.class)
public class PrimeTest {

    @Theory
    public void isPrime(int candidate) {
          // called with candidate=1, candidate=2, etc etc  
    }

    public static @DataPoints int[] candidates = {1, 2, 3, 4, 5};
}

Ответ 2

Похоже, это идеальный кандидат для параметризованных тестов.

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

Вот несколько хороших сообщений в блоге:

Ответ 3

Недавно я начал проект zohhak. он позволяет вам писать:

@TestWith({
   "25 USD, 7",
   "38 GBP, 2",
   "null,   0"
})
public void testMethod(Money money, int anotherParameter) {
   ...
}

Ответ 4

Вот сообщение, которое я написал, показывает несколько способов повторного запуска тестов с примерами кода:

Повторно повторите тест JUnit

Вы можете использовать бегун @Parametrized или использовать специальный бегун, включенный в сообщение

Ответ 5

Гораздо лучший способ (позволяет иметь более одного метода тестирования) - использовать JUnit с JUnitParams:

import junitparams.Parameters;
import org.junit.Test;

@RunWith(JUnitParamsRunner.class)
Public class TestClass() {

    @Test
    @Parameters(method = "generateTestData")
    public void test1(int value, String text, MyObject myObject) {
        ... Test Code ...
    }

    .... Other @Test methods ....

    Object[] generateTestData() {
        MyObject objectA1 = new MyObject();
        MyObject objectA2 = new MyObject();
        MyObject objectA3 = new MyObject();

        return $(
            $(400, "First test text.", objectA1),
            $(402, "Second test text.", objectA2),
            $(403, "Third test text.", objectA3)
        );
    }
}

Вы можете получить проект junitparams здесь.

Ответ 6

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

Ответ 7

Если вы уже используете @RunWith в своем тестовом классе, вам, вероятно, нужно взглянуть на this.

Ответ 8

Если вы не хотите или не можете использовать пользовательский бегун (например, вы уже используете другого бегуна, например, Robolectric runner), вы можете попробовать этот Правило DataSet.