【问题标题】:Groovy Spock Unit test throwing NullPointerException because mock object is nullGroovy Spock 单元测试抛出 NullPointerException 因为模拟对象为空
【发布时间】: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


【解决方案1】:

我想通了,这个测试没有失败,另一个失败了。

【讨论】:

    猜你喜欢
    • 2019-01-22
    • 2015-09-28
    • 2012-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多