我对用于测试的函数有一点问题。这是我的测试方法:
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总是立即退出?
答案 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
。如果您想要始终返回结果,则删除这些调用。