首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用VisibleForTesting进行纯JUnit测试

如何使用VisibleForTesting进行纯JUnit测试
EN

Stack Overflow用户
提问于 2015-10-21 19:39:47
回答 4查看 137.1K关注 0票数 54

我正在我的项目上对我的纯java文件运行纯JUnit4 java测试,但是在不手动公开的情况下,我无法找到清楚地使用@VisibleForTesting的方法。

例如:

代码语言:javascript
运行
复制
@VisibleForTesting
public Address getAddress() {
  return mAddress;
}

方法必须是public,才能让它成为测试的“公共”,但是在这种情况下,注释没有意义,对吗?如果注释不起任何作用,为什么不直接使用注释呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-04-30 13:12:34

标签本身有助于链接器识别不必要的访问。

为了降低直接使用它的风险,可以将此方法添加为internal中的Kotlin或protected中的Java,而不是public,并且只有在同一个包中的测试或类才能访问该方法。

爪哇:

代码语言:javascript
运行
复制
@VisibleForTesting
protected Address address() {
  return mAddress;
}

科特林:

代码语言:javascript
运行
复制
@VisibleForTesting
internal fun address(): Address {
  return address;
}
票数 31
EN

Stack Overflow用户

发布于 2015-10-22 11:19:48

如果测试在相应的测试包中(与生产代码相同的包名),则使方法包-私有,测试将能够看到它。

代码语言:javascript
运行
复制
@VisibleForTesting
Address getAddress() {
  return mAddress;
}

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

注释的要点是,它的约定可以用于静态代码分析,而注释不能。

票数 62
EN

Stack Overflow用户

发布于 2018-09-25 11:41:50

根据Android文档

如果不是用于测试,则可以选择指定可见性;这允许工具从生产代码中捕获意外访问。

示例:

代码语言:javascript
运行
复制
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
public Address getAddress()
票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33267820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档