У меня есть ProductRepository с 2 методами, GetAllProducts и GetProductByType, и я хочу проверить логику в GetProductByType. Внутри GetProductByType делает вызов GetAllProducts, а затем фильтрует правильные.
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();
}
Итак, в своем тесте я хотел бы высмеять вызов GetAllProducts, поэтому он возвращает список продуктов, определенных в моем тесте, а затем вызывает оригинальный GetProductsByType, который будет потреблять издеваемую GetAllProducts.
Я пытаюсь что-то вроде кода ниже, но оригинальный GetProductByType не выполняется, он тоже издевается. В TypeMock у меня есть метод CallOriginal, который исправляет это, но я не могу понять это с помощью Moq. Любые идеи?
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());