簡體   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