我的任务是为一个别人做了很长时间的应用程序做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
}