对Guava类库的注释类型 VisibleForTesting的理解

本文介绍了一种利用Guava库中的VisibleForTesting注解来简化私有方法单元测试的方法。VisibleForTesting注解用于标记那些仅出于测试目的而增加可见性的私有成员。虽然该注解本身不会改变成员的访问级别,但它提示开发者将私有方法修改为protected,以便直接调用进行测试。

 

 

有一次问同事:除了用JAVA Reflection 来测试私有方法外,还有什么好的方法可以更简单的测试私有方法。

同事回答,可以用GuavaVisibleForTesting。于是看了看这个注释的用法。

这个注释的接口定义如下:

@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才能真正测试私有方法。


转载于:https://www.cnblogs.com/yanlongpankow/p/6240563.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值