Tengo un ProductRepository con 2 métodos, GetAllProducts y GetProductByType, y quiero probar la lógica en GetProductByType. Internamente, GetProductByType realiza una llamada a GetAllProducts y luego filtra los correctos.Llamando al método original con Moq
public virtual IEnumerable<Product> GetAllProducts()
{
//returns all products in memory, db etc
}
public virtual IEnumerable<Product> GetProductsByType(string type)
{
return (from p in GetAllProducts() where p.Type == type select p).ToList();
}
Así que en mi prueba me gustaría burlarse de la llamada a GetAllProducts, por lo que devuelve una lista de los productos definidos en mi prueba, y luego llamar a la GetProductsByType original, que consumirá los GetAllProducts burlado.
Estoy intentando algo así como el código a continuación, pero el GetProductByType original no se ejecuta, también es ridículo. En TypeMock tengo un método CallOriginal que soluciona esto, pero no puedo resolverlo con Moq. ¿Algunas ideas?
var mock = new Mock<ProductRepository>();
mock.Setup(r => r.GetAllProducts()).Returns(new List<Product>() {p1, p2, p3});
var result = mock.Object.GetProductsByType("Type1");
Assert.AreEqual(2, result.Count());
Me limitaría a subclasificar tu ProductRepository por ti mismo y no simularlo en absoluto. Su "FakeProductRepository" devolvería una lista de productos codificados y usted puede probar GetProductsByType contra esa lista. –
Una gran sugerencia, no he pensado en eso ... ¡Viernes! – rodbv