Почему методы JUnit DataPoints не работают для примитивов?

1

При запуске следующего MWE тест testDataPointsMethodFailsForPrimitives выходит из строя с помощью AssertionError: Never found parameters that satisfied method assumptions. Violated assumptions: [] AssertionError: Never found parameters that satisfied method assumptions. Violated assumptions: [] но отлично передаются при раскомментировании точек данных, созданных как статические члены тестового класса. testDataPointsMethodWorksForObjects, с другой стороны, работает только денди, как есть.

Почему точки данных, которые являются примитивами, не распознаются JUnit при создании через метод, а точки данных, которые являются объектами?

import org.junit.experimental.theories.DataPoints;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;

@RunWith(Theories.class)
public class MWE {

//    @DataPoints
//    public static int[] primitiveArray = new int[] {1, 2, 3, 4, 5, 6};

    @DataPoints
    public static int[] primitiveMethod() {
        return new int[] {1, 2, 3, 4, 5, 6};
    }

    @DataPoints
    public static Integer[] objectMethod() {
        return new Integer[] {1, 2, 3, 4, 5, 6};
    }

    @Theory
    public void testDataPointsMethodFailsForPrimitives(int primitive) {
    }

    @Theory
    public void testDataPointsMethodWorksForObjects(Integer primitive) {
    }

}
Теги:
junit

2 ответа

3
Лучший ответ

Похоже, это исправлено в 4.12 бета-версиях JUnit. Вот описание проблемы и ее разрешение: https://github.com/junit-team/junit/issues/637

0

Да, проблема вызвана ошибкой в junit-4.11. Это особенно проблематично, если вы используете Intellij, поскольку он поставляется по умолчанию с junit-4.11.

Вот как я его исправил:

  1. Нажмите на значок "Структура проекта" на панели инструментов или Ctrl + Alt + Shift + S, чтобы отобразить параметры проекта.
  2. Нажмите "Библиотеки", затем "+", затем "От Maven..."
  3. Найдите Junit и выберите junit: junit: 4.12-beta-3 и следуйте инструкциям, чтобы сохранить файл jar в каталоге проекта /lib.
  4. Вернитесь к панели проектов главного редактора Windows, разверните запись "Внешние библиотеки" на панели. Если в зависимостях есть junit-4.11, это тот, который поставляется с Intellij. Просто удалите его и перестройте свой код.

После этого вы можете использовать @DataPoints с примитивным типом данных, например:

    @DataPoints
    public static int[] primitiveMethod() {
       System.out.println("creating data points ...");
       return new int[] {1, 2, 3, 4, 5, 6};
    }

    @Theory
    public void testDataPointsMethodFailsForPrimitives(int primitive) {
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню