我从另一个使用
的团队继承了一些代码@Test (expectedExceptions = {Exception.class})
当代码可能抛出更具体的异常时到处都是。
我的理解是这是错误的,因为我们没有期待正确的例外类型。但是现在的所有者说他们没有看到这个问题。
我的理解是否正确?
答案 0 :(得分:1)
这是一种糟糕的设计,因为除了正在测试的错误之外,它可能会掩盖错误。例如,假设您的代码应该对某些操作抛出SecurityException
,而是因为天真的取消引用而抛出NullPointerException
。当测试失败时,你的测试就会通过。
您应始终使匹配器尽可能具体,在这种情况下,这意味着适用的最具体的异常类。
答案 1 :(得分:0)
异常是java中所有类型异常的Parent类,因此如果代码抛出任何已检查或未经检查的异常,基本上您的测试将通过。但是编写单元测试会更好,它会期望代码可以抛出特定类型的异常。对于例如假设你有一个验证参数的方法
public void validateParam(String param) throws SomeCustomValidationException {
//suppose param is null , now this code will throw NullPointerException
if (param.length() > 2) {throw new SomeCustomValidationException();}
}
你可以这样称呼它
public void businessLogic(String param) {
try {validateParam(param);}
catch(SomeCustomValidationException e){//show error dialog to the user}
}
因此,虽然您的单元测试将通过,但您的业务逻辑将无法按预期工作