我是靠谱客的博主 朴素香氛,这篇文章主要介绍Spock单元测试-mock static方法(普通类中的static方法),现在分享给大家,希望可以做个参考。

groovy单元测试,mock静态方法,需要使用PowerMockito。还会影响其他普通方法的mock。
例如下面的代码:
1.OrderInfoServiceProxy.getOrderInfo为静态方法。
2.orderActionServiceProxy.updateOrderData为普通public方法,但是该类有static公共变量。
但是如果用spock+PowerMockito,mock掉上面第一条。第二条也需要在PrepareForTest注解上加上该类

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@RunWith(PowerMockRunner.class) @PowerMockRunnerDelegate(Sputnik.class) @PrepareForTest([OrderInfoServiceProxy.class, OrderActionServiceProxy.class]) @SuppressStaticInitializationFor(["com.ctrip.tourtailor.vendorform.service.biz.proxy.OrderInfoServiceProxy", "com.ctrip.tourtailor.vendorform.service.biz.proxy.OrderActionServiceProxy"]) class OrderServiceTimeCoreSpockTest extends Specification { def orderServiceTimeCore = new OrderServiceTimeCore() def orderActionServiceProxy = Mock(OrderActionServiceProxy) void setup() { //调用该类的普通方法,但是有static公共变量,所以需要在PrepareForTest注解上加上该类 orderServiceTimeCore.orderActionServiceProxy = orderActionServiceProxy //调用该类的static方法 PowerMockito.mockStatic(OrderInfoServiceProxy.class) } def "Update4126ClientConfirmTime"() { given: "OOrder" //查询订单 Calendar calendar = Calendar.getInstance() calendar.add(Calendar.DATE, -1) //静态方法 PowerMockito.when(OrderInfoServiceProxy.getOrderInfo(1L, true)).thenReturn(new OrderInfoDTO(orderId: 1L, orderDate: calendar)) PowerMockito.when(OrderInfoServiceProxy.getOrderInfo(2L, true)).thenReturn(null) //普通方法 orderActionServiceProxy.updateOrderData(_, _, _) >> _ expect: orderServiceTimeCore.update4126ClientConfirmTime(orderId, date); where: orderId | date || _ 1 | new Date() || _ 2 | new Date() || _ 1 | null || _ }

普通方法测试对比。
orderActionServiceProxy.updateOrderData为普通public方法,但是该类有static公共变量。却不用加PrepareForTest注解。
代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class OrderFirstCallTimeServiceImplSpockTest extends Specification { def orderFirstCallTimeService = new OrderFirstCallTimeServiceImpl() def orderActionServiceProxy = Mock(OrderActionServiceProxy) def orderService = Mock(OrderService) void setup() { orderFirstCallTimeService.orderActionServiceProxy = orderActionServiceProxy orderFirstCallTimeService.orderService = orderService } def "Update4126ClientConfirmTime"() { given: "OOrder" //查询订单 Calendar calendar = Calendar.getInstance() calendar.add(Calendar.DATE, -1) java.sql.Timestamp createDate = new java.sql.Timestamp(calendar.getTime().getTime()) orderService.getOrder(1L) >> new OOrder(orderId: 1L, datachangeCreatetime: createDate) orderService.getOrder(2L) >> null orderActionServiceProxy.updateOrderData(_, _, _) >> _ expect: orderFirstCallTimeService.update4126ClientConfirmTime(orderId, date); where: orderId | date || _ 1 | new Date() || _ 2 | new Date() || _ 1 | null || _ } }

最后

以上就是朴素香氛最近收集整理的关于Spock单元测试-mock static方法(普通类中的static方法)的全部内容,更多相关Spock单元测试-mock内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部