成功断言后返回值

时间:2017-07-04 13:44:12

标签: java junit

我对用于测试的函数有一点问题。这是我的测试方法:

public static List<FieldError> proofFields(final List<String> fieldNames, final List<FieldError> errors, boolean fieldsAbsent){
    List<FieldError> foundFields = errors.stream().filter(fieldError -> fieldNames.contains(fieldError.getField())).collect(toList());
    if(fieldsAbsent){
        assertTrue(foundFields.isEmpty());
    } else {
        assertTrue(fieldNames.size() == foundFields.size());
    }
    return foundFields;
}

如果一个列表(部分)包含在另一个列表中,则应该检查。

无论测试成功与否,我都希望返回结果。有没有办法做到这一点,或者assertTrue / assertFalse总是立即退出?

2 个答案:

答案 0 :(得分:1)

您的方法应该返回值或验证数据。不要混合它。你做到了,现在你遇到了问题:)

public static List<FieldError> proofFields(final List<String> fieldNames, final 
       List<FieldError> errors){
         return errors.stream().filter(fieldError -> 
       fieldNames.contains(fieldError.getField())).collect(toList());
}

public static assertFieldWithError(final List<String> fieldNames, final 
       List<FieldError> errors){
      assertEquals(fieldNames.size(), foundFields.isEmpty());
      ... iterate do more detail and check ....with assertXXXX();
}

public static assertFieldWithoutError(final 
       List<FieldError> errors){
      assertTrue(foundFields.isEmpty());
}

也适用于:

assertTrue(fieldNames.size() == foundFields.size())

更好地使用

assertEquals(fieldsAbsent.size() , foundFields.size());

因为它提供了更多信息。

答案 1 :(得分:1)

你无法双管齐下。你不能把蛋糕吃掉。

您使用的是多个JUnit'断言'之一 - 或者您的代码不会抛出异常。

含义:当assert()的条件不符合时,它就会被抛出。

因此答案是:必须清除你的要求。如果您希望该测试在某些情况下抛出,请保持asserts。如果您想要始终返回结果,则删除这些调用。