@parameters в Junit 4

Лучший способ протестировать закрытый метод через другой открытый метод. Если это не может быть сделано, то одно из следующих условий верно:

  1. закрытый метод является мертвым кодом
  2. существует запах дизайна около класса, который Вы тестируете
  3. метод, который Вы пытаетесь протестировать, не должен быть частный
6
задан skaffman 30 July 2009 в 12:22
поделиться

4 ответа

You can use the Theories runner (search for the word theories at that link) to pass different parameters to different methods.

3
ответ дан 16 December 2019 в 21:44
поделиться

Вероятно 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 .

2
ответ дан 16 December 2019 в 21:44
поделиться

Он не предназначен для использования более одного метода данных. Вы можете увидеть это в ответе скаффмана .

Почему не предусмотрено реализации двух методов данных?
Ответом может быть: Связь.

Слишком сложно разделить этот тест на два тестовых случая? Вы сможете ввести небольшое наследование и использовать общие методы. С двумя тестовыми наборами вы можете предоставить два метода разделенных данных и очень хорошо протестировать свой материал.

Надеюсь, это поможет.

2
ответ дан 16 December 2019 в 21:44
поделиться

Вы можете создавать внутренние классы для каждого набора методов, которые работают с одними и теми же параметрами. Например:

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;
  }
 }
}
1
ответ дан 16 December 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: