Mockito中RETURNS_DEEP_STUBS对于enum的处理

25 10月

Mockito是一个测试常用的库,可以快速模拟对象。

加上对于Junit的支持不错,配有对应的Runner,使用起来也是相当方便。

一般使用

最常用的使用自然是SomeClass some=mock(SomeClass.class),如果你使用注解,还可以写成


如果这个类有这样的方法some.getObjectOne().getValue(),我们是不能直接使用given或者when断言简单mock的,需要使用


Mockito提供了RETURNS_DEEP_STUBS模式,可以自己处理这种情况,如果我们使用SomeClass some=mock(SomeClass.class, RETURNS_DEEP_STUBS),我们就只需要一句简单的


就解决了。

对于Enum的处理

RETURNS_DEEP_STUBS本质上调用的ReturnsDeepStubs类。

这个类在org.mockito.internal.stubbing.defaultanswers下面。


在方法中检测了该对象能否mock


就是检查了一下基本的东西,比如是否final。

然后获取了对应类型的默认值。

然而对于Enum是没有默认值这种说法的,所以直接返回了null,这样的话直接使用类似


是会出现NPE的。

参考资料

ISSUE-207

发表评论

电子邮件地址不会被公开。