Mam ProductRepository z 2 metodami, GetAllProducts i GetProductByType i chcę przetestować logikę w GetProductByType. Wewnętrznie GetProductByType wywołuje GetAllProducts, a następnie filtruje prawidłowe.Wywoływanie oryginalnej metody za pomocą 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();
}
Więc w moim teście chciałbym mock wywołanie GetAllProducts, więc zwraca listę produktów określonych w moim teście, a następnie połączyć się z oryginalną GetProductsByType, które zużywają szydzili GetAllProducts.
Próbuję coś podobnego do poniższego kodu, ale oryginalny GetProductByType nie jest wykonywany, jest również wyszydzony, jak również. W TypeMock używam metody CallOriginal, która to naprawia, ale nie mogę tego obliczyć za pomocą Moq. Jakieś pomysły?
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());
Chciałbym po prostu podklasy ProductRepository samodzielnie, a nie makiety w ogóle. Twój "FakeProductRepository" zwróci listę produktów zakodowanych na sztywno i możesz przetestować GetProductsByType na tej liście. –
Świetna propozycja, nie pomyślałam o tym ... Piątki! – rodbv