【Guava】对Guava类库的注释类型 VisibleForTesting的理解
1.背景
有一次问同事:除了用JAVA Reflection
来测试私有方法外,还有什么好的方法可以更简单的测试私有方法。
同事回答,可以用Guava的VisibleForTesting。于是看了看这个注释的用法。
这个注释的接口定义如下:
@GwtCompatible
public @interface VisibleForTesting
Annotates a program element that exists, or is more widely visible than otherwise necessary, only for use in test code.
从字面上可以被这样理解: 注释一个已经存在的程序元素或者所注释的元素被给于它所必须的更宽松的 可见性,仅仅被使用在测试代码中。
我们通过一个测试私有方法的例子来看看这个注释的使用:
1 public class PrivateData {2 @VisibleForTesting
3 /*private*/ void testPrivate(int pr){4 System.out.print(pr);
5 }
6 }
下面是测试类:
1 public class PrivateDataTest {2 @Test
3 public void testPrivate() throws Exception {4 PrivateData pm = new PrivateData();
5 pm.testPrivate(1);
6 }
7
8 }
通过上面的代码看出, 被测试的testPrivate方法的可见性还是被改成Protected。也就是,VisibleForTesting只是一个注释,一个元数据metadata,它并没有进入程序逻辑,也没有被转化成字节码byte code 从而被JVM执行。
笔者猜测可能是Guava 的 程序员犯懒了, 即不愿意在unit test里直接利用Reflection来测试私有方法。也没有把私有方法写入另一个类中。所以设计了VisibleForTesting的注解来提醒其他程序员: 这里为了测试私有方法把私有方法改成了Protected(受保护的)并放宽了访问限制。
可是就JAVA本身而言,只有通过Reflection才能真正测试私有方法。
但是我测试的时候发现在spring boot项目种不好用,没法使用
【Spring】Spring boot 如何进行私有方法测试
【Guava】对Guava类库的注释类型 VisibleForTesting的理解相关推荐
- guava之guava cache
一说到缓存,有没有脑海里立马想到的是guava cache.ehcache.redis.memerycache等等这些和缓存相关的技术实现,计算机专业出生可能还会想到cpu的一级缓存.二级缓存.三级缓 ...
- [Google Guava] 排序: Guava强大的”流畅风格比较器”
原文链接 译者: 沈义扬 排序器[Ordering]是Guava流畅风格比较器[Comparator]的实现,它可以用来为构建复杂的比较器,以完成集合排序的功能. 从实现上说,Ordering实例就是 ...
- Guava 系列 - Guava基础
文章目录 Guava 系列 - Guava基础 1.是什么 2.如何构建 3.用户文档 4.为什么选择使用guava Guava 系列 - Guava基础 1.是什么 guava 是一个开源的java ...
- java guava eventbus_JAVA | Guava EventBus 使用
JAVA | Guava EventBus 使用 系列文章目录 Table of Contents [TOC] 前言 EventBus 是 Guava 的事件处理机制,是观察者模式(生产/消费模型)的 ...
- Go语言中的注释类型和代码风格
Go语言中的注释类型 Go的代码风格
- java注释类型_Java 8类型注释
java注释类型 Lambda表达式是迄今为止Java 8讨论最多和最受促进的功能.虽然我同意Lambda是一个很大的改进,但我认为其他一些Java 8功能由于Lambda的炒作而有所欠缺. 在这篇文 ...
- TypeScript里的工具类型Partial的理解用法
TypeScript里的工具类型Partial的理解用法 Partial 可以快速把某个接口类型中定义的属性类型变成可选的(Optional): 其实Partial源码很简单 Partial 可以快速 ...
- Guava (一)Guava Cache进阶之同步/异步load
使用guava cache的时候,在cache中没有值或者值需要更新的时候,都需要去load,而这个load往往对应从数据库或者远程接口拿数据并缓存下来的操作.在高qps场景的服务中,这个load可能 ...
- 【guava】guava 11.0.2 版本 key 肯能丢数据的bug
文章目录 1.概述 1.1 11版本丢数据 1.1 20版本正常 3.小结 1.概述 在开发的时候,我把数据放到guava中,但是却发现数据没有存储进去,开始怀疑是Key的hash相同了,后来调试发现 ...
最新文章
- QT安卓web使用mysql_Qt使用MySQL笔记一
- Android Monkey压力测试
- 中国第一个发《Nature》的竟然是清朝人!被皇帝夸天下第一,他却觉得羞耻..........
- 【LCT】旅游(P1505)
- 两种不同字符串比较方法的性能对比
- Youki的笔记本配置要求
- 【云周刊】第145期:2017天猫双11总交易额1682亿,背后阿里绝密50+技术揭秘!
- WIN7系统下Mapgis6.7常见的两个问题及解决办法
- 2021-12-06 自动化专业C语言上机作业参考答案12
- 目前最快速最好最有效的【淡化疤痕的方法】是什么
- 提升网站关键词排名的技巧
- MATLAB中mat转换为xlsx表格数据
- cocos2d-x的初步学习二十三之模仿微信打飞机二
- 【PHP】实现验证码图片
- linux PPPOE拨号上网设置
- Kaggle: ImageNet Dog Breed Classification (Pytorch)
- 批次更新失败服务器返回的信息,服务器出现大批量登录审核失败/NtLmSsp攻击
- ural 1998 The old Padawan
- 计算机上可用内存不足无法打开图,Windows照片查看器无法显示此图片因为计算机上的可用内存可能不足解决方法...
- 可解释机器学习-shap value的使用