我有一個帶有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