Java 验证是否调用了列表元素方法
如何验证在单元测试期间是否调用了列表元素的方法签名?对于下面的代码段,如何验证在使用Java 验证是否调用了列表元素方法,java,unit-testing,junit,mockito,Java,Unit Testing,Junit,Mockito,如何验证在单元测试期间是否调用了列表元素的方法签名?对于下面的代码段,如何验证在使用ordermock对象进行验证时是否调用了item.getPrice() 实现代码段: public BigDecimal getTotalPrice(Order order) { BigDecimal totalPrice = BigDecimal.ZERO; for (Item item : order.getItems()) { totalPrice.add(item.get
order
mock对象进行验证时是否调用了item.getPrice()
实现代码段:
public BigDecimal getTotalPrice(Order order) {
BigDecimal totalPrice = BigDecimal.ZERO;
for (Item item : order.getItems()) {
totalPrice.add(item.getPrice());
}
return totalPrice;
}
@Test
public void testTotalPrice() {
List<Item> items = new ArrayList<>();
for (BigDecimal price : prices) {
Item item = mock(Item.class);
when(item.getPrice()).thenReturn(price);
items.add(item);
}
Order order = mock(Order.class);
when(order.getItems()).thenReturn(items)
BigDecimal totalPrice = orderHandler.getTotalPrice(order);
verify(order, atLeastOnce()).getItems();
verify(order.getItems().get(anyInt()), atLeastOnce()).getPrice();
// assert
}
单元测试代码段:
public BigDecimal getTotalPrice(Order order) {
BigDecimal totalPrice = BigDecimal.ZERO;
for (Item item : order.getItems()) {
totalPrice.add(item.getPrice());
}
return totalPrice;
}
@Test
public void testTotalPrice() {
List<Item> items = new ArrayList<>();
for (BigDecimal price : prices) {
Item item = mock(Item.class);
when(item.getPrice()).thenReturn(price);
items.add(item);
}
Order order = mock(Order.class);
when(order.getItems()).thenReturn(items)
BigDecimal totalPrice = orderHandler.getTotalPrice(order);
verify(order, atLeastOnce()).getItems();
verify(order.getItems().get(anyInt()), atLeastOnce()).getPrice();
// assert
}
实现此单元测试场景的最佳方法是什么?试试看
//...other code removed for brevity
for (Item item : items) {
verify(item, atLeastOnce()).getPrice();
}
我真的不能使用
验证(order.getItems().get(anyInt()).getPrice()和result来验证for循环中的元素方法吗?如果是这样,为什么?order.getItems()
在测试中返回的是一个实际的列表实现(项),而不是正在监视并可以验证的模拟。但是,列表中的项目是模拟的,可以进行验证。这也是无效使用MatcherException
的原因anyInt()
正在应用于一个具体的方法。