TestNG类期待Exception.class

时间:2014-09-25 06:08:54

标签: java exception-handling testng

我从另一个使用

的团队继承了一些代码
@Test (expectedExceptions = {Exception.class})

当代码可能抛出更具体的异常时到处都是。

我的理解是这是错误的,因为我们没有期待正确的例外类型。但是现在的所有者说他们没有看到这个问题。

我的理解是否正确?

2 个答案:

答案 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} 
}

因此,虽然您的单元测试将通过,但您的业务逻辑将无法按预期工作