У меня есть несколько методов на уровне службы приложений, которые делают такие вещи:
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 */
}
Кажется, Спорный вопрос, добавляют ли эти модульные тесты ценность, которая стоит затраченных усилий. Я совершенно уверен, что уровень сервисов приложений должен быть протестирован на интеграцию.
Следует ли тестировать уровень сервисов приложений на этом уровне детализации или достаточно ли тестов интеграции?