【发布时间】:2019-08-27 00:52:57
【问题描述】:
我正在为一个处理订单并将完成的订单设置为准备发货的类编写一些测试。为客户检索订单,并使用已完成订单的订单状态来完成处理。但是,当我运行测试时,他们说 'Cannot get completedLines on a null object...' 从错误中可以清楚地看出 OrderStatus 对象为 null。但是,我在创建测试时设置了它,如图所示
ordersService.getStatus(orders) >> orderStatus
OrdersService ordersService
DiscountService discountService
ShippingService shippingService
Order getCustomerOrder(Long customerId) {
List<Order> orders =
ordersService.retrieveOrderWithDiscount(customerId);
List<LoyaltyDiscount> discounts =
discountService.getDiscounts(customerId,orders);
OrderStatus orderStatus = ordersService.getStatus(orders);
shippingService.processCompletedOrders(orderStatus.completedLines,orders);
}
class OrderSpecification extends Specification {
OrdersService ordersService
DiscountService discountService
ShippingService shippingService
def setup(){
ordersService = Mock(OrdersService)
discountService= Mock(DiscountService)
shippingService = Mock(ShippingService)
}
def 'completed orders with discounts should be shipped' (){
given:
long id =12334
List <Order> orders = .. createOrders()
OrderStatus orderStatus = createOrderStatus()
ordersService.retrieveOrderWithDiscount(12345) >> orders
ordersService.getStatus(orders) >> orderStatus
shippingService.processCompletedOrders(orderStatus.completedLines,orders)
... rest omitted
}
}
【问题讨论】:
-
您的示例代码恐怕不是很有帮助。你删掉信息,其他代码行是多余的。初始化是
orderStatus = createOrderStatus(),但createOrderStatus()是做什么的?显然,它返回null,据我所知,从您提供的稀缺信息中可以看出。信息隐藏不会让任何人更接近答案。请编辑您的问题并将其转换为MCVE,然后通过评论通知我们。您是开发人员,因此您应该知道如何使问题可重现。
标签: unit-testing groovy spock