Привязать точки данных в JUnit Theory к определенной переменной

У меня есть следующая теория для проверки. В коде я хочу, чтобы переменная a была четной, а переменная b — нечетной

@RunWith(Theories.class)
public class TestJunit{
   // add the error
  @DataPoints
  public static Integer[] integersOdd() {
     return new Integer[]{1, 3, 5};
  }

  @DataPoints
  public static Integer[] integersEven() {
    return new Integer[]{2, 4, 6};
 }

   @Theory
   public void testAdd(Integer a , Integer b) {
        ...
   }
}

На данный момент я использую acceptTrue и функцию проверки, например:

   public boolean validateInput(Integer a, Integer b){
     Set<Integer> even = new HashSet<Integer>(Arrays.asList(integersEven()));
     Set<Integer> odd = new HashSet<Integer>(Arrays.asList(integersOdd()));
     return (even.contains(a) && odd.contains(b));
   }

Модифицированная теория:

   @Theory
   public void testAdd(Integer a , Integer b) {
     Assume.assumeTrue(validateInput(a,b));
     System.out.println("a="+a+", b="+b);
     assertTrue(a+b>-1);
   // add any test
   }

Это очень грязный способ, так как Java выберет все комбинации и отбросит входные данные в assumeTrue. Что, если у меня есть 10 теорий с 10 точками данных? Java попробует 100 комбинаций, а я хотел только 10!

Есть ли аккуратный способ сделать это? Может быть какая-то аннотация, чтобы указать JUnit выбирать значения для переменных, из которых DataPoint?

Редактировать. Еще один способ, который я обнаружил, — использовать генераторы тестов. Я использую JUnit-QuickCheck [Читать здесь] для генерации случайных данных в соответствии с диапазоном, требуемым мои переменные. Затем я инкапсулирую их в класс и передаю этот объект в свою теорию для проверки.


person Mangat Rai Modi    schedule 09.12.2014    source источник


Ответы (1)


JUnit 4.12 позволяет использовать именованные точки данных в теориях. Вот исходный запрос на включение, а вот примечания к выпуску для 4.12 - ищите "Добавлен механизм сопоставления определенных точек данных" .

person pholser    schedule 10.12.2014
comment
Ух ты! Это потрясающее дополнение. Кстати, я должен поблагодарить вас за библиотеку junit-quickcheck. Я использую его, и он очень прост и удобен в использовании. - person Mangat Rai Modi; 10.12.2014