概述
groovy单元测试,mock静态方法,需要使用PowerMockito。还会影响其他普通方法的mock。
例如下面的代码:
1.OrderInfoServiceProxy.getOrderInfo为静态方法。
2.orderActionServiceProxy.updateOrderData为普通public方法,但是该类有static公共变量。
但是如果用spock+PowerMockito,mock掉上面第一条。第二条也需要在PrepareForTest注解上加上该类
@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注解。
代码如下:
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 static方法(普通类中的static方法)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复