我有以下服务方法:
public CommandDTO update(UUID uuid, EmployeeRequest request) {
final List<Product> productList = productRepository
.findAllByUuidOrderByOrderNumber(uuid);
final List<UUID> uuidList = request.getUuidList();
for (int i = 0; i < uuidList.size(); i++) {
Product product = productList.get(i);
product.setOrderNumber(i + 1);
// how can I get the product value in this line?
}
return CommandDTO.builder().uuid(uuid).build();
}
通常,我使用ArgumentCaptor
来获取传递给仓库或服务的值。然而,在这个例子中,我想在product.setOrderNumber(i + 1);
之后获取的产品值不是传递给服务或仓库的。因此,我无法获取它。我不确定使用@Spy
或doAnswer
是否可行,但据我所知,这些方法不能使用,因为值没有传递给服务或存储库。2有什么想法吗?
2条答案
按热度按时间z3yyvxxp1#
您可以模拟存储库以返回模拟的列表:
在本例中,您可以在此处使用ArgumentCaptor,但我认为它在本例中是多余的,简单的验证调用就足够了
iqjalb3h2#
变量
product
来自productList
,而productList
又来自repository.findAllByUuidOrderByOrderNumber()
方法,所以如果你模拟了仓库,你可以写这样的代码:从理论上讲,您甚至可以在上面的测试逻辑中返回一个模拟的产品,但我建议使用一个真正的
Product
对象。现在,无论产品发生了什么,都可以在测试中Assert。
例如: