我有一个带有2个方法GetAllProducts和GetProductByType的ProductRepository,我想在GetProductByType上测试逻辑。在内部,GetProductByType调用GetAllProducts,然后过滤正确的。使用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();
}
所以在我的测试,我想嘲笑调用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());
我只是自己继承你的ProductRepository而不是模拟它。您的“FakeProductRepository”将返回硬编码的产品列表,您可以针对该列表测试GetProductsByType。 – 2010-06-18 21:17:06
伟大的建议,没有想到...星期五! – rodbv 2010-06-18 21:20:16