Spawn JUnit 4 Тестирует программно - PullRequest
3 голосов
/ 09 марта 2011

У меня есть тест JUnit 4, который создает тестовые данные и устанавливает условие теста для всех данных. Если все правильно, я получаю зеленый тест.

Если одно из данных не проходит тест, выполнение всего теста прерывается. Я хотел бы иметь один тест JUnit для каждого из данных. Можно ли порождать тесты JUnit программно, чтобы в моей IDE было много тестов?

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

1 Ответ

5 голосов
/ 09 марта 2011

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

Для этого есть класс Parameterized.Этот пример показывает, как его можно использовать:

@RunWith(Parameterized.class)
public class FibonacciTest {
    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] {{ 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } });
    }

    private final int input;
    private final int expected;

    public FibonacciTest(final int input, final int expected) {
        this.input = input;
        this. expected = expected;
    }

    @Test
    public void test() {
        assertEquals(expected, Fibonacci.compute(input));
    }
}                    

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

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

...