![](/img/trans.png)
[英]Using springboot, How can I access a repository inside a asynchronous method?
[英]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.