我正在项目中的纯java文件上运行纯JUnit4 java测试,但我找不到一种方法来清楚地使用@VisibleForTesting,而无需手动公开该内容。
例如:
@VisibleForTesting
public Address getAddress() {
return mAddress;
}
该方法必须是
public
才能让它对测试“公开”,但在这种情况下,注释没有意义,对吧?如果注释不起作用,为什么不直接使用注释呢?
将方法设为包私有,如果测试位于相应的测试包中(与生产代码相同的包名称),则测试将能够看到它。
@VisibleForTesting
Address getAddress() {
return mAddress;
}
还要考虑重构代码,这样您就不需要显式测试私有方法,而是尝试测试公共接口的行为。难以测试的代码可能表明可以对生产代码进行改进。
注释的要点在于它的约定,可以用于静态代码分析,而注释则不能。
根据Android文档:
如果不是为了测试,您可以选择指定可见性应该是什么;这允许工具捕获生产代码中的意外访问。
示例:
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
public Address getAddress()
标签本身有助于 linter 识别不需要的访问。
为了降低直接使用它的风险,请将此方法添加为
Kotlin中的
internal
或Java中的
protected
而不是public
,这样只有同一包中的测试或类才会被使用。能够访问该方法。
Java:
@VisibleForTesting
protected Address address() {
return mAddress;
}
科特林:
@VisibleForTesting
internal fun address(): Address {
return address;
}
@VisibleForTesting
注释用于 Guava 中的包方法中,并且不属于 JUnit API 的一部分。注解只是一个标记,表明该方法可以被测试。它甚至没有被加载到 JVM 中。