JUnit тестируют с динамическим количеством тестов

92
задан Community 23 May 2017 в 11:47
поделиться

3 ответа

Смотрите на [1 112] Параметризованные Тесты в JUnit 4.

На самом деле я сделал это несколько дней назад. Я попытаюсь объяснить...

Первая сборка Ваш тестовый класс обычно, как Вы, где, просто тестируя с одним входным файлом. Украсьте свой класс:

@RunWith(Parameterized.class)

Сборка один конструктор, который берет вход, который изменится в каждом проверочном вызове (в этом случае это может быть сам файл)

Затем создайте статический метод, который возвратится Collection из массивов. Каждый массив в наборе будет содержать входные параметры для Вашего конструктора класса, например, файла. Украсьте этот метод:

@Parameters

Вот демонстрационный класс.

@RunWith(Parameterized.class)
public class ParameterizedTest {

    private File file;

    public ParameterizedTest(File file) {
        this.file = file;
    }

    @Test
    public void test1() throws Exception {  }

    @Test
    public void test2() throws Exception {  }

    @Parameters
    public static Collection<Object[]> data() {
        // load the files as you want
        Object[] fileArg1 = new Object[] { new File("path1") };
        Object[] fileArg2 = new Object[] { new File("path2") };

        Collection<Object[]> data = new ArrayList<Object[]>();
        data.add(fileArg1);
        data.add(fileArg2);
        return data;
    }
}

Также проверка этот пример

99
ответ дан bruno conde 24 November 2019 в 06:33
поделиться

JUnit 3

public class XTest extends TestCase {

    public File file;

    public XTest(File file) {
        super(file.toString());
        this.file = file;
    }

    public void testX() {
        fail("Failed: " + file);
    }

}

public class XTestSuite extends TestSuite {

    public static Test suite() {
        TestSuite suite = new TestSuite("XTestSuite");
        File[] files = new File(".").listFiles();
        for (File file : files) {
            suite.addTest(new XTest(file));
        }
        return suite;
    }

}

JUnit 4

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

@RunWith(Parameterized.class)
public class TestY {

    @Parameters
    public static Collection<Object[]> getFiles() {
        Collection<Object[]> params = new ArrayList<Object[]>();
        for (File f : new File(".").listFiles()) {
            Object[] arr = new Object[] { f };
            params.add(arr);
        }
        return params;
    }

    private File file;

    public TestY(File file) {
        this.file = file;
    }

    @Test
    public void testY() {
        fail(file.toString());
    }

}
27
ответ дан McDowell 24 November 2019 в 06:33
поделиться

Должно быть возможным в JUnit 3 путем наследования от TestSuite и переопределения tests() метод для списка файлов и для каждого возврата экземпляр подкласса TestCase, который берет имя файла в качестве параметра конструктора и имеет метод тестирования, который тестирует файл, данный в конструкторе.

В JUnit 4 это могло бы быть еще легче.

3
ответ дан Michael Borgwardt 24 November 2019 в 06:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: