Запуск одного и того же теста JUnit несколько раз с разными данными - PullRequest
73 голосов
/ 15 апреля 2009

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

Ответы [ 8 ]

65 голосов
/ 15 апреля 2009

взгляните на теорию 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};
}
23 голосов
/ 15 апреля 2009

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

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

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

12 голосов
/ 05 декабря 2012

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

@TestWith({
   "25 USD, 7",
   "38 GBP, 2",
   "null,   0"
})
public void testMethod(Money money, int anotherParameter) {
   ...
}
5 голосов
/ 22 июня 2016

Гораздо лучший способ (позволяет использовать более одного метода тестирования) - использовать 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 здесь .

3 голосов
/ 08 апреля 2011

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

Несколько раз запустить тест JUnit

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

2 голосов
/ 24 ноября 2016

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

2 голосов
/ 15 апреля 2009

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

1 голос
/ 27 апреля 2013

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

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