如何检查代码库中是不是有任何方法调用
Posted
技术标签:
【中文标题】如何检查代码库中是不是有任何方法调用【英文标题】:How to check if there are any invocations of a method in the code base如何检查代码库中是否有任何方法调用 【发布时间】:2013-11-26 01:07:39 【问题描述】:假设我有一个类Foo
和一个方法evilMethod
:
class Foo
public void evilMethod()
// do sth
有没有办法编写一个测试,只要在类路径上的任何类中调用此方法就会失败?我的意思是,不是在运行时调用该方法,而是在代码中声明它时。
例如,在类路径中的任何类中存在此代码都会导致测试失败:
if(false)
Foo f = new Foo();
f.evilMethod(); // test fails because of that
我想要实现的目标:我想注释不应该在某个项目中调用的方法,但需要放置在那里以便在另一个项目中使用,然后编写一个测试以确保不会在任何地方调用注释的方法确实。
【问题讨论】:
反射方法意味着运行时解决方案,这是您明确排除的。我理解这一点的方式是,您正在寻找一个静态代码分析器来查找带注释的方法的调用。对吗? 是的,你是对的。但是您可以使用反射获得基于注释或任何其他标准的所有方法或类,所以我想也许您可以对方法调用做类似的事情。 您希望在编译期间还是在运行测试时进行此分析? 运行测试时我在想。 这有帮助吗? ***.com/questions/930289/… 【参考方案1】:尽管您要求不要在运行时对其进行测试(除非您只是在生产中进行测试),但我个人还是希望将检查作为单元测试的一部分。使用 Mockito 它看起来像这样:
verify(mockFoo, never()).evilMethod();
根据答案:
https://***.com/a/12863072/575766
如果您的项目代码覆盖率很好,那应该可以为您解决问题。
【讨论】:
这是个好主意,但我希望有更多开箱即用的解决方案,例如:编写一个测试,涵盖所有添加此注释的方法,然后忘记它。 我认为您会为开箱即用的解决方案而苦恼 - 我项目中的类被禁止调用的方法要么是私有的/受保护的等,要么根本不存在。【参考方案2】:我不知道它是否能解决您的问题,但FindBugs 对 Java 项目进行了静态代码分析。也许您可以在那里定义一个涵盖您的问题的规则...
【讨论】:
谢谢!我们已经使用了 FindBugs,所以这将是一个很好的解决方案(与我在这里实际要求的不同,但可能更好)以上是关于如何检查代码库中是不是有任何方法调用的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法检查我的应用程序是不是调用了 iOS 8 独有的任何方法?