В JUnit 5 параметризованных тестов. Входные данные CSV. Есть ли способ передать Double.NaN, Double.POSITIVE_INFINITY? - PullRequest
2 голосов
/ 21 июня 2020

Я пытаюсь передать Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY и Double.NaN в качестве параметров CSV в JUnit5:

@DisplayName("Testing ActivationFunction.heaviside")
@ParameterizedTest(name = "Testing ActivationFunction.heaviside ({0},{1})")
@CsvSource({
    "Double.NEGATIVE_INFINITY, 0",
    "-100, 0",
    "-1, 0",
    "0, 0.5",
    "1, 1",
    "100, 1",
    "Double.POSITIVE_INFINITY, 0",
    "Double.NaN, Double.NaN"
})
void testActivationFunction_heaviside(double input, double output) {

    assertEquals(output, ActivationFunction.heaviside(input));

}

К сожалению, в средстве выполнения тестов JUnit5 это вызывает ошибки типа «Error converting parameter at index 0: Failed to convert String "Double.POSITIVE_INFINITY" to type java.lang.Double» . Есть ли хороший способ автоматически передавать такие значения для тестирования, или мне просто нужно написать отдельный метод тестирования следующим образом:

assertEquals(0, Double.NEGATIVE_INFINITY);
assertEquals(1, Double.POSITIVE_INFINITY);
assertEquals(Double.NaN, Double.NaN);

1 Ответ

2 голосов
/ 21 июня 2020

Как следует из ошибки, JUnit не может преобразовать исходное значение в тип double. Double.NEGATIVE_INFINITY является stati c конечным членом класса Double. Вы не можете передать имя переменной в CsvSource. Однако вам нужно передать его повторное представление String.

From Java docs:

  • Если аргумент равен NaN, результатом будет строка «NaN».
  • Если m равно бесконечности, она представлена ​​строкой «Infinity»; таким образом, положительная бесконечность дает результат «Бесконечность», а отрицательная бесконечность дает результат «-Бесконечность».

Таким образом, вы можете повторно смоделировать свой код, как показано ниже:

@DisplayName("Testing ActivationFunction.heaviside")
@ParameterizedTest(name = "Testing ActivationFunction.heaviside ({0},{1})")
@CsvSource({
    "-Infinity, 0",
    "-100, 0",
    "-1, 0",
    "0, 0.5",
    "1, 1",
    "100, 1",
    "Infinity, 0",
    "NaN, NaN"
})
void testActivationFunction_heaviside(double input, double output) {
    System.out.println(input + " :: "+output);
}
...