当我们为更复杂的方法/类编写单元测试时,我还没有那么自信。我对tdd和单元测试一般的理解是,你应该能够重构类/方法的实现,并且有信心你没有改变其行为明确。测试行为和模拟
public class OrderService implements IOrderService
{
private IItemService itemService;
public Order create(OrderCreationDto dto)
{
Order order = new Order();
order.addItems(createOrderLines(dto.products));
return order;
}
private Set<OrderLine> createOrderItems(List<ProductDto> products)
{
Set<OrderLine> orderLines = new HashSet<>();
for (ProductDto product : products) {
Item item = itemService.create(product.id, product.price);
OrderLine orderLine = new OrderLine();
orderLine.setItemId(item.id);
orderLines.add(orderLine);
}
return orderLines;
}
}
基本上我只是从OrderCreationDto创建一个新的订单。对于每个订单行,我必须先使用项目服务创建一个新项目。我的一个测试可以确保,每个订单行都有一定的参数调用itemService.create(...)
。
由于每次调用itemService.create(...)
是我想重构类在一个请求中创建的所有项目..让我们做的变化相当昂贵
现在我所做的更改和我以前即使班级的行为完全没有改变,书面测试也会失败。
我错过了什么吗?这是我不得不接受的方式,并且简单地调整书面测试?
任何想法是值得赞赏
但您的方法的执行改变了。这不是你的测试失败的好理由吗? – Schaliasos 2012-07-05 11:36:06