我正在我的项目上运行纯JUnit4 java测试而不是我的纯Java文件,但是我找不到一种方法可以清楚地使用@VisibleForTesting而不会手动公开。
例如:
@VisibleForTesting
public Address getAddress() {
return mAddress;
}
该方法必须是public
才能让它对测试“公开”,但在这种情况下,注释没有意义吗?如果注释不会做任何事情,为什么不只是使用注释?
答案 0 :(得分:34)
如果测试在相应的测试包中(与生产代码相同的包名),则使方法包为private,测试将能够看到它。
@VisibleForTesting
Address getAddress() {
return mAddress;
}
还要考虑重构代码,这样您就不需要显式测试私有方法,尝试测试公共接口的行为。难以测试的代码可以表明可以对生产代码进行改进。
注释的要点是它的约定可以用于静态代码分析,而注释则不能。
答案 1 :(得分:10)
根据Android文档:
您可以选择指定可见性,如果不进行测试,应该是什么?这样,工具就可以从生产代码中捕获意外访问。
示例:
@VisibleForTesting(否则= VisibleForTesting.PRIVATE) 公共地址getAddress()
答案 2 :(得分:10)
标签本身可帮助短绒识别不想要的访问。
要降低直接使用它的风险,请将此方法添加为 Kotlin 中的internal
或 Java 中的protected
,而不是{{1 }},只有同一个程序包中的测试或类才能访问该方法。
Java:
public
科特琳:
@VisibleForTesting
protected Address address() {
return mAddress;
}
答案 3 :(得分:2)
@VisibleForTesting注释用于Guava中的package-methods,而不是JUnit API的一部分。注释只是一个标记,表示可以测试方法。它甚至不会加载到JVM中。