为什么SonarQube在异常被更改为自定义异常时抱怨泛型异常



我的任务是为一个别人做了很长时间的应用程序做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,你不想做你的业务东西,如果参数url包含这个无效的URL。所以我猜IllegalArgumentException比一般的Exception要精确得多。

From JavaDoc ofIllegalArgumentException:

抛出,表示方法传递了非法或不适当的参数。

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

现有的答案提供了有用的信息,但是如果您在原始帖子中指定的约束是正确的,那么这些答案就没有真正的帮助。

如果你不能修改测试中的代码,你就没有办法修复SonarQube问题。

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
}

最新更新