verifiable unit test setup ejemplos c# mocking moq

c# - unit - moq verifiable



Llamando al método original con Moq (1)

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.

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 burlarme de la llamada a GetAllProducts, por lo que devuelve una lista de productos definidos en mi prueba, y luego llamo al GetProductsByType original, que consumirá GetAllProducts.

Estoy intentando algo así como el siguiente código, 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());


Establezca CallBase en true en su simulacro. Esto llamará a los métodos o propiedades virtuales originales si existen, y no se han configurado para devolver un valor enlatado.

var mock = new Mock<ProductRepository>() { CallBase = true };