2009-10-22 123 views
1

我該如何去嘲諷Moq的圖像?用Moq嘲笑System.Drawing.Image

它沒有構造函數(始終由工廠方法生成)。

基本上我想要做這樣的事情...

var image = new Mock<Image>(); 
image.Setup(i=>i.Save(someStream,ImageFormat.Jpeg); 
var testableObject = new ObjectUnderTest(image.Object); 

testableObject.MethodBeingTested(); 

image.VerifyAll(); 

回答

5

昨天已經回答過類似的問題,你不妨看一看this thread on mocking a static Singleton

如果絕對有必要嘲笑這種行爲,那麼被禁止的方法是生成一個暴露你需要的方法的接口,用一個具體的類來實現它[有效地包裝Image類],並模擬接口進行測試。

它確實聽起來有些過度,但如果您需要模擬\驗證可測試類和圖像之間的交互,那就是實現它的方法。或者,您可以將您的可測試類傳給Image的實際實例,然後將此實例與預期輸出進行比較[標準單元測試方法]

+0

感謝您的支持,您的原始答案非常有幫助。創建接口和裝飾器看起來有點骯髒,所以你可以測試它(特別是對於框架類)。在我的情況下測試輸出將是混亂的,因爲它將驗證流的內容是否有正確的腳本(單調乏味) – 2009-10-23 09:32:26

+1

我認爲在測試時「我正在測試什麼?」是一個重要的問題。不知道更多關於您的問題,我會冒險猜測您正在測試某種圖像處理。嚴格地說,這個操作應該獨立於Image進行測試,比如字節流測試或其他。測試一個「系統」類通常被認爲是矯枉過正的 - 就像測試Web服務一樣,我也見過很多。人們可能會認爲CLR是「安全的」。 你想從系統類[即圖像]分離業務邏輯[即任何發生在你的圖像]。 – 2009-10-23 13:26:58

+0

http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx – 2013-06-20 19:41:27