supongamos que tengo varios OrderProcessor
s, cada uno de ellos maneja un orden un poco diferente.
La decisión sobre qué OrderProcessor
de usar que se hace de acuerdo con las propiedades del objeto Order
, y se lleva a cabo por un método de fábrica, así:unidad probando un método de fábrica
public IOrderProcessor CreateOrderProcessor(IOrdersRepository repository, Order order, DiscountPercentages discountPercentages)
{
if (order.Amount > 5 && order.Unit.Price < 8)
{
return new DiscountOrderProcessor(repository, order, discountPercentages.FullDiscountPercentage);
}
if (order.Amount < 5)
{
// Offer a more modest discount
return new DiscountOrderProcessor(repository, order, discountPercentages.ModestDiscountPercentage);
}
return new OutrageousPriceOrderProcessor(repository, order);
}
Ahora, mi problema es que quiero para verificar que la devuelto OrderProcessor
ha recibido los parámetros correctos (por ejemplo, el porcentaje de descuento correcto).
Sin embargo, esas propiedades no son públicas en las entidades OrderProcessor
.
¿Cómo sugeriría que manejara este escenario?
La única solución que era capaz de llegar a la propiedad está haciendo porcentaje de descuento del OrderProcessor
s pública, pero parece una exageración para hacer eso sólo con el propósito de las pruebas unitarias ...
Si bien esto está bien y parece razonable querer saber que se usan los porcentajes de descuento correctos, de lo contrario alguien podría cambiar el código para hacer que ambas rutas devuelvan 'discountPercentages.FullDiscountPercentage' y nadie lo sabría, y de repente la gente comenzaría a obtener descuentos completos en lugar del modesto –
Ok, ponga la creación del DiscountOrderProcessor en un método virtual y asegúrese de que se invoque con los parámetros apropiados en función de su lógica de fábrica. – PatrickSteele
Voy a tener que estar de acuerdo con Patrick. Parece que te estás aventurando a pasar de las pruebas unitarias a las pruebas de integración (que también es importante). La prueba unitaria es para una unidad lógica y cada procesador de órdenes debe tener sus propias pruebas unitarias. –