我有一个productrepository,有两个方法: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());