У меня есть рабочий тестовый класс JUnit, который использует DataProvider и фактически читает тесты из файлов в каталоге. Тесты имеют реализацию «фиктивной БД» таким образом, что есть 5 файлов, которые загружаются в память и обслуживаются через интерфейс БД, и один файл, который является «поставщиком данных» (csv с входными данными и ожидаемыми выходными данными).
tests/table1.csv
..
tests/table5.csv
tests/data-provider.csv
Я бы хотел изменить его так, чтобы я мог добавлять новые тесты в подкаталоги.
tests/1/table1.csv
..
tests/1/table5.csv
tests/1/data-provider.csv
tests/2/table1.csv
..
tests/2/table5.csv
tests/2/data-provider.csv
Он должен работать таким образом, чтобы он загружал фиктивную БД в субдиректории, затем запускал тесты из того же субдиректора, затем сбрасывал все и делал то же самое для следующего субдиректора.
Что у меня есть (в комментариях я добавил некоторые вещи, связанные с «subDir», но не уверен, как их можно использовать без необходимости вручную копировать и вставлять как провайдера, так и метод тестирования для каждого подкаталога):
@RunWith(DataProviderRunner.class)
public class MyTest {
private DataProvider1 dp1;
private void init(/*String subDir*/) {
// initialize mocks...
// load actual data from files to dp1
dp1 = new DataProvider1();
dp1.loadFromDir("mytests" /* + "/" + subDir */);
}
@DataProvider
public static Object[][] dataProvider() throws FileNotFoundException, ParseException {
// load the "static" test data (~ mock data)
/*String subDir = "1";*/
init(/*subDir*/);
// load the tests (input, expected output)
DataProviderFetcher tests = new DataProviderFetcher();
preLoadFetcher("mytests" /*+ File.separator + subDir*/ + File.separator + "data-provider.csv", DATA_PROVIDER_PARSER, tests);
return tests.data.toArray(new Object[0][]);
}
@Test
@UseDataProvider("dataProvider")
public void testMyCode(String errorMessage, X input, Y expected) throws Exception {
Y actual = new MyCode().calculate(input);
assertEquals(errorMessage, expected, actual);
}
}