Tengo un montón de métodos en mi capa de servicios de aplicaciones que están haciendo cosas como esta:Capa de servicio de aplicación: ¿Pruebas unitarias, pruebas de integración o ambas?
public void Execute(PlaceOrderOnHoldCommand command)
{
var order = _repository.Load(command.OrderId);
order.PlaceOnHold();
_repository.Save(order);
}
Y en la actualidad, tengo un montón de pruebas unitarias como esto:
[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 */
}
Parece discutible si estas pruebas unitarias agregan valor que vale la pena el esfuerzo. Sin embargo, estoy bastante seguro de que la capa de servicio de la aplicación debería ser probada de integración.
caso de que la capa de servicio de aplicación se va a ensayar a este nivel de granularidad, o son pruebas de integración suficiente?
Estos son realmente buenos puntos que mencionas Creo que primero escribiré las pruebas de integración *, luego veré qué posibles pruebas de valor unitario aportarían (por ejemplo, que InvalidOperationExceptions se lanza cuando se proporciona una identificación de orden incorrecta). Y también menciona un buen punto acerca de probar la implementación con demasiada fuerza: el punto son las entradas y salidas, no la implementación. –