JUnit比较失败字符串更改

时间:2014-06-18 14:21:48

标签: 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 INFO:值:[foo]   输出大小为:1

     

org.junit.ComparisonFailure:   预期:(stoo)中的AvailabilityStatus   实际:AvailabilityStatusinfoo

我尝试添加空格:可用性(空间),(空间)和foo。仍然没有变化。有什么帮助吗?谢谢!

2 个答案:

答案 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()),直到它有效。