我有一大堆的在我的應用服務層的方法正在做這樣的事情:應用服務層:單元測試,集成測試還是兩者?
public void Execute(PlaceOrderOnHoldCommand command)
{
var order = _repository.Load(command.OrderId);
order.PlaceOnHold();
_repository.Save(order);
}
而目前,我有這樣一串單元測試:
[Test]
public void PlaceOrderOnHold_LoadsOrderFromRepository()
{
var repository = new Mock<IOrderRepository>();
const int orderId = 1;
var order = new Mock<IOrder>();
repository.Setup(r => r.Load(orderId)).Returns(order.Object);
var command = new PlaceOrderOnHoldCommand(orderId);
var service = new OrderService(repository.Object);
service.Execute(command);
repository.Verify(r => r.Load(It.Is<int>(x => x == orderId)), Times.Exactly(1));
}
[Test]
public void PlaceOrderOnHold_CallsPlaceOnHold()
{
/* blah blah */
}
[Test]
public void PlaceOrderOnHold_SavesOrderToRepository()
{
/* blah blah */
}
這些單元測試是否增加值得付出努力的價值似乎是有爭議的。不過,我確信應用服務層應該進行集成測試。
應該測試應用程序服務層到這個粒度級別還是集成測試足夠?
這些都是真的你提出的好點。我想我會先編寫集成測試*,然後查看單元測試可能帶來的附加值(例如,在提供錯誤訂單ID時拋出InvalidOperationException)。而且你也提出了一個關於測試實現的好點 - 關鍵是輸入和輸出,而不是實現。 –