2010-02-09 54 views
6

如果我這樣做:是否有可能(通過Moq)使用Lambda參數存根方法調用?

var repository = new Mock<IRepository<Banner>>(); 
repository.Setup(x => x.Where(banner => banner.Is.AvailableForFrontend())).Returns(list); 

「去哪兒」是需要一個Func<T, ISpecification<T>我倉庫裏的方法。 AvailableForFrontend返回一個ISpecification的實現,而list是一個存儲庫通用類型的IEnumberable。

它編譯得很好,但是當我運行我的測試時出現以下錯誤。

---- System.NotSupportedException : Expression banner => Convert((banner.Is.AvailableForFrontend() & banner.Is.SmallMediaBanner())) is not supported. 

如果我使用我的另一個重載Where的存儲庫,直接採用ISpecification,theres沒有問題。

所以我的新手模擬/ Moq的問題是:我可以用lamdba作爲參數存根方法調用嗎?或者我應該以另一種方式來解決這個問題?

回答

10

你試過的語法如下:

repository.Setup(x => x.Where(It.IsAny<Func<T, ISpecification<T>>()).Returns(list); 
+0

+1這是我需要什麼。謝謝。 – Luhmann 2010-02-09 13:06:35

+0

驗證一個方法是否已經使用特定的lambda表達式作爲參數被調用了麼? Moq有可能嗎? repository.Verify(x => x.Where(banner => banner.Is.AvailableForFrontend())); – 2010-03-22 13:04:03

+0

是的,你可以,如果你指定它可以驗證,而設置。 庫 .Setup(X => x.Where(It.IsAny >()) .Returns(列表) .Verifiable(); 這裏是鏈接到一個安裝驗證使用moq的示例: http://dotnet.dzone.com/news/beginning-mocking-moq-3-part-3 – darthjit 2010-03-22 17:25:46

相關問題