Изменение строки ошибки сравнения JUnit

#java #junit

#java #junit

Вопрос:

для моего тестового примера JUNIT:

 Map<String, Object> input = new LinkedHashMap<String, Object>();
    String operator = "in";
    String argument = "foo";
    String field = "AvailabilityStatus";
    Map<String, Object> innerMap = new LinkedHashMap<String, Object>();
    List<String> innerInnerList = new ArrayList<String>();
    innerInnerList.add(argument);
    innerMap.put(operator, innerInnerList);
    input.put(field, innerMap);

    output = HypervisorResourceUtil.convertToCriteria(input);
    System.out.println("Size of output is :"   output.size());
    for (Criterion c : output) {
        StringBuilder expectedOutputTmp = new StringBuilder().append(field).append(operator).append(argument);
        assertEquals(c.toString(), expectedOutputTmp.toString());
  

и ошибка:

ИНФОРМАЦИЯ о HypervisorResourceUtil: Значения: [foo] Размер вывода: 1

org.junit.Ошибка сравнения: ожидаемый:AvailabilityStatus в (foo) Фактический: AvailabilityStatusinfoo

Я попытался добавить пробелы: доступность (пробел), in (пробел) и foo . тем не менее, никаких изменений. Любая помощь, пожалуйста? Спасибо!

Комментарии:

1. Кроме того, что означает ошибка? и почему во входных данных есть []? изменен ли ввод?

Ответ №1:

У вас есть свой assertEquals метод в обратном направлении. Первым аргументом должно быть ожидаемое значение, а вторым аргументом должен быть ваш фактический результат. Это должно быть:

 assertEquals(expectedOutputTmp.toString(), c.toString());
  

Основываясь на (обратном) сообщении об ошибке, если вы хотите, чтобы ваш тест прошел, ваша ожидаемая строка должна содержать "AvailabilityStatus in (foo)" . Например.

 String expectedOutput = String.format("%s %s (%s)", field, operator, argument);
assertEquals(expectedOutput, c.toString());
  

Примечание: вы можете создать эту expectedOutput строку вне вашего цикла for, поскольку ее не нужно изменять внутри нее.

Ответ №2:

Я считаю, что с помощью JUnit assertEquals expected сначала передается значение, а затем actual значение (cd. API). И поскольку ваш временный StringBuilder файл не содержит пробелов, тест будет продолжать завершаться с ошибкой. Хорошей новостью является то, что ваш фактический String результат выглядит так, как вы хотите, чтобы он был :).

Попробуйте StringBuilder expectedOutputTmp = new StringBuilder().append(field).append(" ").append(operator).append(" ").append(argument) и поиграйте с ним (возможно System.out.println() StringBuilder.toString() , с выводом), пока он не заработает.