如何将 VisibleForTesting 用于纯 JUnit 测试

2022-08-31 19:45:22

我正在我的项目上对我的纯java文件运行纯JUnit4 java测试,但我找不到一种方法来清楚地使用@VisibleForTesting,而不手动公开它。

前任:

@VisibleForTesting
public Address getAddress() {
  return mAddress;
}

方法必须是让它对测试是“公开的”,但是在这种情况下,注释没有意义,对吧?如果注释不会执行任何操作,为什么不只使用注释?public


答案 1

将方法包设为私有,如果测试位于相应的测试包中(与生产代码相同的包名称),则测试将能够看到它。

@VisibleForTesting
Address getAddress() {
  return mAddress;
}

还要考虑重构代码,这样就不需要显式测试私有方法,请尝试测试公共接口的行为。难以测试的代码可能表明可以对生产代码进行改进。

注释的要点是,它的约定和可以在静态代码分析中使用,而注释则不能。


答案 2

标签本身有助于识别不需要的访问。

为了降低直接使用它的风险,请像在KotlinJava中那样添加此方法,而不是使用,只有同一包中的测试或类才能访问该方法。internalprotectedpublic

爪哇岛:

@VisibleForTesting
protected Address address() {
  return mAddress;
}

Kotlin:

@VisibleForTesting
internal fun address(): Address {
  return address;
}

推荐