Как я могу протестировать несколько файлов Java с одним и тем же junit? - PullRequest
0 голосов
/ 24 мая 2019

Как я могу протестировать несколько файлов .java (которые по-разному реализуют один и тот же метод) с помощью одного модульного теста?Например, у меня есть папка с разными файлами .java (или разными папками с одинаковыми именами .java), как я могу выбрать все из них для запуска?сейчас мне нужно каждый раз выбирать один из них, перемещать его в одну папку с модульным тестом и запускать его.Спасибо.

Редактировать: Я думаю, что я не достаточно ясно, поэтому я приведу еще пример:

У меня есть файлы aa.java и bb.java, которые оба имеют метод "static"public int fibonacci (int x) ", я хочу создать модульный тест, который будет использовать методы aa и bb и посмотреть, правильно ли они работают (assertEquals (результат, ожидаемый)).PS У меня более 2 файлов с одним и тем же методом.

Ответы [ 2 ]

1 голос
/ 25 мая 2019

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

Например,

private static void assertFibonacci(IntUnaryOperator op) {
    int n = 5;
    int expected = 8;
    // or a loop of values, whatever
    assert op.applyAsInt(n) == expected;
}

Затем в модульном тесте:

@Test
public void testX() {
    assertFibonacci(new aa()::fibonacci);
    assertFibonacci(new bb()::fibonacci);
}

Или лучше использовать отдельные методы тестирования, поэтому ошибки в каждом сообщаются отдельно:

@Test
public void testAA() {
    assertFibonacci(new aa()::fibonacci);
}

@Test
public void testBB() {
    assertFibonacci(new bb()::fibonacci);
}
0 голосов
/ 25 мая 2019

Spock Framework , работающий поверх JUnit, имеет гораздо лучшую поддержку параметризованного тестирования , что, как вам кажется, нужно, чем обычный JUnit или TestNG.

Если вы не можете использовать Spock, вы можете использовать JUnit Parameterized и предоставить экземпляр каждого из ваших классов в качестве набора данных, или (моя рекомендация) написать все ваши общие модульные тесты в абстрактной базекласс WidgetTests с методом protected abstract Widget getInstance() и подклассом для каждого вида виджета.Это по-прежнему будет иметь несколько классов, но вы не будете повторять свои тестовые случаи, и это позволит вам организовывать дополнительные специфичные для реализации тесты организованным способом.

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