Moq

2010-06-18 25 views
36
ile özgün yöntem çağrısı

İki yöntemle GetAllProducts ve GetProductByType bir ProductRepository var ve GetProductByType adresindeki mantığı test etmek istiyorum. Dahili olarak, GetProductByType GetAllProducts'a bir çağrı yapar ve ardından doğru olanları filtreler. 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(); 
} 

Yani benim test ben alay GetAllProducts tüketir, hangi orijinal GetProductsByType benim testte tanımlanan ürünlerin listesini döndürür, böylece GetAllProducts çağrısına alay ve sonra çağırmak istiyorum.

Aşağıdaki kod gibi bir şey deniyorum, ancak özgün GetProductByType uygulanmadı, o da alay-out. TypeMock'ta bunu çözen bir CallOriginal yöntemim var, ancak bunu Moq ile çözemiyorum. Herhangi bir fikir?

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()); 
+2

Ürün Deponuzu'nu alt sınıflara ayırırdım ve hiç bir şekilde alay etmem. "FakeProductRepository" ürününüz sabit kodlanmış bir ürün listesi döndürür ve GetProductsByType'ı bu listeye karşı test edebilirsiniz. –

+0

Büyük öneri, bunu düşünmemiştim ... Cuma! – rodbv

cevap

56

CallBase'i sahte aygıtınızda true değerine ayarlayın. Bu, varsa orijinal sanal yöntemleri veya özellikleri arayacak ve bir hazır değer döndürmek için ayarlanmamış.

var mock = new Mock<ProductRepository>() { CallBase = true }; 
+0

Tatlı, bugün bunu yapmaya çalışmak çıldırıyordu. Teşekkürler. – PmanAce