Лучший способ протестировать закрытый метод через другой открытый метод. Если это не может быть сделано, то одно из следующих условий верно:
You can use the Theories runner (search for the word theories at that link) to pass different parameters to different methods.
Вероятно data1
, но нет никаких гарантий, он будет использовать тот, который JVM предоставит первым junit4.
Вот соответствующий код от junit:
private FrameworkMethod getParametersMethod(TestClass testClass) throws Exception {
List<FrameworkMethod> methods= testClass.getAnnotatedMethods(Parameters.class);
for (FrameworkMethod each : methods) {
int modifiers= each.getMethod().getModifiers();
if (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers))
return each;
}
throw new Exception("No public static parameters method on class " + testClass.getName());
}
Итак, первый общедоступный статический аннотированный метод, который он найдет, будет используется, но он может найти их в любом порядке.
Почему ваш тест написан именно так? У вас должен быть только один метод с аннотацией @Parameters
.
Он не предназначен для использования более одного метода данных. Вы можете увидеть это в ответе скаффмана .
Почему не предусмотрено реализации двух методов данных?
Ответом может быть: Связь.
Слишком сложно разделить этот тест на два тестовых случая? Вы сможете ввести небольшое наследование и использовать общие методы. С двумя тестовыми наборами вы можете предоставить два метода разделенных данных и очень хорошо протестировать свой материал.
Надеюсь, это поможет.
Вы можете создавать внутренние классы для каждого набора методов, которые работают с одними и теми же параметрами. Например:
public class JunitTest6 {
@RunWith(value = Parameterized.class)
public static class PushTest{
private String str;
public PushTest(String region) {
this.str = region;
}
@Parameters
public static Collection<Object[]> data() {
Object[][] data = {{some data}}
return Arrays.asList(data);
}
@Test
public void pushTest() {
System.out.println("Parameterized str is : " + str);
str = null;
}
}
@RunWith(value = Parameterized.class)
public static class PullTest{
private String str;
public PullTest(String region) {
this.str = region;
}
@Parameters
public static Collection<Object[]> data() {
Object[][] data = {{some other data}}
return Arrays.asList(data);
}
@Test
public void pullTest() {
System.out.println("Parameterized new str is : " + str);
str = null;
}
}
}