Могу ли я спросить, как написать тест junit 5 для интерфейса с различными реализациями?
Например, у меня есть интерфейс Solution
с различными реализациями, такими как SolutionI
, SolutionII
. Могу ли я написать только один тестовый класс для проверки обоих?
Существует сообщение , показывающее пример, но если необходимо вызвать несколько методов тестирования, я должен передать параметр для каждого метода тестирования.
Могу ли я спросить, есть ли элегантный способ, подобный тому, что используется в Junit4
В Junit4 у меня есть очень элегантный пример кода следующим образом
@RunWith(Parameterized.class)
public class SolutionTest {
private Solution solution;
public SolutionTest(Solution solution) {
this.solution = solution;
}
@Parameterized.Parameters
public static Collection<Object[]> getParameters() {
return Arrays.asList(new Object[][]{
{new SolutionI()},
{new SolutionII()}
});
}
// normal test methods
@Test
public void testMethod1() {
}
}
Junit 5 претензий ExtendWith()
похоже, я попробовал следующий код
@ExtendWith(SolutionTest.SolutionProvider.class)
public class SolutionTest {
private Solution solution;
public SolutionTest(Solution solution) {
System.out.println("Call constructor");
this.solution = solution;
}
@Test
public void testOnlineCase1() {
assertEquals(19, solution.testMethod(10));
}
@Test
public void testOnlineCase2() {
assertEquals(118, solution.testMethod(100));
}
static class SolutionProvider implements ParameterResolver {
private final Solution[] solutions = {
new SolutionI(),
new SolutionII()
};
private static int i = 0;
@Override
public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
return parameterContext.getParameter().getType() == Solution.class;
}
@Override
public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) throws ParameterResolutionException {
System.out.println(i);
return solutions[i++];
}
}
}
К сожалению, testMethod1
использует SolutionI
, а testMethod2
использует SolutionII
, что имеет смысл, я не знаю, поможет ли это немного вдохновить.
Заранее спасибо за помощь