当异常已更改为自定义异常时,为什么 SonarQube 会抱怨通用异常

Why SonarQube complains about generic Exception when the exception has been changed to custom one

我一直在为一个别人做的应用程序做 JUnit 测试,我无法修改原始代码,所以当我遇到这样的事情时:

public String clean(String url) throws Exception {
    if (url.indexOf(invalidURL) {
        throw new Exception("Severe XSSS detected");
    }
}

我用以下方法编写测试:抛出异常,SonarQube 抱怨通用异常,如果我编写自定义异常,如:public class MyException extends Exception,SonarQube 仍然不喜欢它,任何帮助将不胜感激!

我正在解释您的代码:如果参数 url 包含此无效 [=22],您似乎在某处有一个无效的 URL 并且您不想做您的业务=].所以我猜 IllegalArgumentException 比通用 Exception.

更精确

来自 IllegalArgumentException 的 JavaDoc:

Thrown to indicate that a method has been passed an illegal or inappropriate argument.

此外,我假设 SonarQube 此时会接受 IllegalArgumentException 而不会抱怨。

MyException 扩展了 Exception,所以你也必须更改方法声明 - throws 语句:

public String clean(String url) throws MyException {
   if (url.indexOf(invalidURL) {
      throw new MyException("Severe XSSS detected");
   }
}

更改是安全的,因为代码与之前的选项兼容:

try {
    object.clean("invalidUrl")
} catch (Exception e) {
    // MyException is handled by this catch block
}

现有答案提供了有用的信息,但如果您在原始 post 中指定的限制是正确的,那么这些答案并没有真正帮助。

如果您不能实际修改被测代码,则无法解决 SonarQube 问题。