我的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 INFO:值:[foo] 输出大小为:1
org.junit.ComparisonFailure: 预期:(stoo)中的AvailabilityStatus 实际:AvailabilityStatusinfoo
我尝试添加空格:可用性(空间),(空间)和foo。仍然没有变化。有什么帮助吗?谢谢!
答案 0 :(得分:1)
你的assertEquals
方法倒退了。第一个参数应该是期望值,第二个参数应该是您的实际结果。它应该是:
assertEquals(expectedOutputTmp.toString(), c.toString());
根据(向后)错误消息,如果您希望测试通过,那么您期望的字符串需要包含"AvailabilityStatus in (foo)"
。 E.g。
String expectedOutput = String.format("%s %s (%s)", field, operator, argument);
assertEquals(expectedOutput, c.toString());
注意:您可以在for循环之外构建此expectedOutput
字符串,因为它不需要在其中进行更改。
答案 1 :(得分:0)
我相信,对于JUnit&#39; assertEquals
,首先传递expected
值,然后传递actual
值(cd。API)。由于您的临时StringBuilder
不包含空格,测试将继续失败。好消息是你的实际String
似乎是你想要的那样:)。
尝试使用StringBuilder expectedOutputTmp = new StringBuilder().append(field).append(" ").append(operator).append(" ").append(argument)
,并使用它(可能System.out.println()
输出StringBuilder.toString()
),直到它有效。