繁体   English   中英

如何在 Springboot 中测试其中包含多个方法的方法?

[英]How can I test the method which has several methods inside it in Springboot?

public CartPriceResponse cartSelectAll(final String check, final User user) {
    List<Cart> carts = cartRepository.findByUser(user);
    List<CartPricePerSellerResponse> cartPricePerSellerResponses = new ArrayList<>();

    for (Cart cart : carts) {
        cart.setIsSelected(check.equals("true"));
        cartPricePerSellerResponses.add(cartPricePerSeller(user, cart.getItem().getSeller()));
    }
    final CartPriceTotalResponse cartPriceTotalResponse = cartPriceTotal(user);

    return CartPriceResponse.builder()
            .cartPricePerSellerResponses(cartPricePerSellerResponses)
            .cartPriceTotalResponse(cartPriceTotalResponse)
            .build();
}

这是我希望它测试的那个,它将布尔值作为参数,如果它为真,它将所有项目 isSelected 设置为“真”。 cartPricePerSeller 将计算每个卖家的所有内容,而 cartPriceTotal 将对购物车中的所有商品执行相同的操作。

问题是我已经测试了 cartPricePerSeller 和 cartPriceTotal,所以不需要测试它们,但我不知道如何模拟或监视它们。

在 cartPricePerSeller 内部调用另一个公共方法来计算每个卖家的 shippingFee。

我认为有些事情发生了,它需要一些重构,但我真的不知道该怎么做。

如果您给我任何小提示以使其清楚,我将不胜感激。

public CartPricePerSellerResponse cartPricePerSeller(User user, Seller seller) {
    final List<Cart> carts = cartRepository.findByUserAndIsSelectedTrue(user);

    final List<Cart> cartList = carts.stream().filter(cart -> cart.getItem().getSeller().equals(seller)).collect(Collectors.toList());
    long cartTotalPricePerSeller = 0;
    int cartTotalQuantityPerSeller = 0;

    for (Cart cart : cartList) {
        cartTotalPricePerSeller += cart.getItemOption().getItemPrice().getPriceNow() * cart.getQuantity();
        cartTotalQuantityPerSeller += cart.getQuantity();
    }
    return CartPricePerSellerResponse.builder()
            .sellerId(seller.getId())
            .itemTotalPricePerSeller(cartTotalPricePerSeller)
            .itemTotalQuantityPerSeller(cartTotalQuantityPerSeller)
            .itemShippingFeePerSeller(shippingFeeCheck(seller.getId(), cartTotalPricePerSeller))
            .build();
}

public CartPriceTotalResponse cartPriceTotal(User user) {
    final List<Cart> carts = cartRepository.findByUserAndIsSelectedTrue(user);

    long cartTotalPrice = 0;
    int cartTotalQuantity = 0;
    int cartTotalShippingFee = 0;

    final List<Seller> sellers = carts.stream().map(Cart::getItem).map(Item::getSeller).distinct().collect(Collectors.toList());
    for (Seller seller : sellers) {
        final CartPricePerSellerResponse cartPricePerSellerResponse = this.cartPricePerSeller(user, seller);

        cartTotalPrice += cartPricePerSellerResponse.getItemTotalPricePerSeller();
        cartTotalQuantity += cartPricePerSellerResponse.getItemTotalQuantityPerSeller();
        cartTotalShippingFee += cartPricePerSellerResponse.getItemShippingFeePerSeller();
    }
    return CartPriceTotalResponse.builder()
            .cartTotalPrice(cartTotalPrice)
            .cartTotalQuantity(cartTotalQuantity)
            .cartTotalShippingFee(cartTotalShippingFee)
            .build();
}

如果我在这里违反任何规则,我很抱歉。 这是我的第一篇文章

  • 公共方法可以单独模拟和测试
  • 私有方法应该通过公共方法进行测试
  • 对于您正在测试的公共方法(比如说m1() ,如果它正在调用另一个公共方法 - 比如说m2() 。那么您绝对可以使用Spy模拟m2() ,然后可以单独测试m2()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM