验证方法体中是否使用了方法参数

Lak*_*arg 3 java reflection unit-testing linter

我有一个界面,如下所示

interface Evaluator {
    boolean requiresP2();
    EvalResult evaluate(Param1 p1, Param2 p2, Param3 p3);
    // some more methods
}
Run Code Online (Sandbox Code Playgroud)

该接口由几个类实现.p2evaluate方法的参数由某些人使用,而其他人则不使用.该方法requiresP2基本上返回一个布尔值,告知evaluate方法是否使用p2.

现在,这些问题在上下文中可能看起来有点奇怪,但请相信我,这在我们的用例中是有意义的.另外,重构所有代码需要花费大量时间来消除对requiresP2方法的需求,所以如果我们讨论除了自上而下的代码库重构之外的其他解决方案,我将不胜感激.

问题是方法的返回值requiresP2取决于evaluate方法的实现方式.因此,每个人都必须确保requiresP2在更改方法时更新evaluate方法.

我正在寻找方法,以便这可以由编译器/单元测试/ linters强制执行,而不是将它留给开发人员的内存.

编辑:我仍在探索模拟框架对此问题的适用性.

我认为我可以在单元测试中反映在单元测试中检查它evaluate的主体以检查它是否引用p2然后确保它与requiresP2方法返回的值匹配但似乎无法检查方法体使用反射.

我正在寻找关于如何做到这一点的建议.任何输入都表示赞赏.

Ran*_*itz 5

您还没有提到另一个选项:静态代码分析工具.

您可以使用SonarQube + SonarLint组合来获得所需的强制执行:

使用SonarQube服务器创建新的静态代码分析规则,该规则将基于您使用的界面和您的独特用例.

然后在IDE/IDE上安装SonarLint(支持Eclipse和IntelliJ),并将其连接到SonarQube服务器.

这样,静态代码分析扫描将检测您的接口的不正确使用情况,并在IDE中通过相关代码行(实际上是对您的代码进行linting)的可视标记来指示.