Смотрите на [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;
}
}
Также проверка этот пример
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());
}
}
Должно быть возможным в JUnit 3 путем наследования от TestSuite
и переопределения tests()
метод для списка файлов и для каждого возврата экземпляр подкласса TestCase
, который берет имя файла в качестве параметра конструктора и имеет метод тестирования, который тестирует файл, данный в конструкторе.
В JUnit 4 это могло бы быть еще легче.