#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()
, с выводом), пока он не заработает.