Java 成功断言后返回值

Java 成功断言后返回值,java,junit,Java,Junit,我对用于测试的函数有一个小问题。以下是我的测试方法: public static List<FieldError> proofFields(final List<String> fieldNames, final List<FieldError> errors, boolean fieldsAbsent){ List<FieldError> foundFields = errors.stream().filter(fieldError -&

我对用于测试的函数有一个小问题。以下是我的测试方法:

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;
}
公共静态列表字段(最终列表字段名、最终列表错误、布尔字段){
List foundFields=errors.stream().filter(fieldError->fieldNames.contains(fieldError.getField()).collect(toList());
如果(已发送){
assertTrue(foundFields.isEmpty());
}否则{
assertTrue(fieldNames.size()==foundFields.size());
}
返回foundFields;
}
它应该检查一个列表是否(部分)包含在另一个列表中


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

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

更好地利用

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

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

更好地利用

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

因为它的信息量更大。

你不能两全其美。你不能既有蛋糕又吃

要么您正在使用众多JUnit“断言”中的一个,要么您的代码不会抛出异常

含义:
assert()
的本质是在其条件不满足时抛出


因此答案是:你必须弄清楚你的需求。如果您希望在某些情况下抛出该测试,则保留
断言。如果您希望始终返回结果,则可以删除这些调用。

您不能同时使用这两种方法。你不能既有蛋糕又吃

要么您正在使用众多JUnit“断言”中的一个,要么您的代码不会抛出异常

含义:
assert()
的本质是在其条件不满足时抛出


因此答案是:你必须弄清楚你的需求。如果您希望在某些情况下抛出该测试,则保留
断言。如果希望始终返回结果,则删除这些调用。

代码应该可以正常工作。如果不满足条件,断言将引发异常。如果您不想这样做,也许您希望打印消息而不是使用断言。您可以捕获AssetOnError并对其不做任何操作。如果AssetTrue的结果失败,为什么要忽略它?您的代码应该可以正常工作。如果不满足条件,断言将引发异常。如果您不想这样做,也许您想打印一条消息而不是使用断言。您可以捕获AssetOnError并对其不做任何处理。如果AssetTrue失败,为什么要忽略它的结果?谢谢,这是一种很好的组合方式。:)谢谢,这是一种很好的组合方式。:)
assertEquals(fieldsAbsent.size() , foundFields.size());