java - 如何在循环中模拟具有迭代的服务方法?
问题描述
我正在尝试对其中包含循环的方法进行单元测试。
基本上,该方法如下所示:
public List<Discount> methodName(Request request){
for (Discount discountIteration: request.getList()) {
applyDiscount(service1.getCode(discountIteration));
}
...
}
所以,我不知道如何模拟service1.getCode(discountIteration)
.
when(...).thenReturn(...);
我应该对每个位置做一个request.getList()
(这是一个客户对象的列表)。
或者有没有办法动态地做到这一点?
编辑:我试图模拟method
循环内部,而不是List
解决方案
when(...).thenReturn(...);
我应该对每个位置 做一个request.getList()
(这是一个客户对象的列表)。或者有没有办法动态地做到这一点?
我不会做这两个,但我会重构代码以使这个用例的类之间的耦合更小。
由于粒度耦合如此之小,模拟将需要大量样板代码,无法直接阅读,并且测试可维护性会很弱。
您可以通过这种方式更改service1.getCode()
方法或添加新方法:
public List<Discount> methodName(Request request){
List<Code> codes = service1.getCodes(request.getList());
for (int i = 0; i < discountIteration.size(); i++) {
Discount discountIteration = request.getList().get(i);
applyDiscount(codes.get(i));
}
...
}
现在您只需要模拟由getCodes()
.
推荐阅读
- sql - 在 Postgresql 中加入表后合并列?
- java - java.lang.ClassNotFoundException:在路径上找不到类“com.sun.mail.util.MailLogger”:
- javascript - React-Native Firebase 中的推送通知
- asp.net - ASP.NET 网站问题 - 不会从外部加载
- testing - 通过 Web API(导航 API 和性能时间线 API)计算前端性能指标
- keras - 如何在密集的自动编码器中指定特征权重?
- java - java注解中Completion的使用
- javascript - How to limit this simple transition made by jQuery?
- sql - 如何获得最新的 tm.detail_notes ( tm.detail_notes for max(tm.timeslip_date))?
- angular - 对于 keycloak + angular + cordova 应用程序,只有在登录后 10-15 秒内完成注销似乎才有效