![](/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.