Как я могу параметризовать dataProvider в junit? - PullRequest
0 голосов
/ 01 мая 2019

У меня есть рабочий тестовый класс 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);
    }

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