2011-08-10 69 views
38

我一直在使用RhinoMocks,但剛開始研究Moq。我有這個非常基本的問題,並且讓我感到驚訝的是,這不會立即開箱。假設我有以下類定義:傳遞Moq模擬對象給構造函數

public class Foo 
{ 
    private IBar _bar; 
    public Foo(IBar bar) 
    { 
     _bar = bar; 
    } 
    .. 
} 

現在我有一個測試,我需要模擬發送給Foo的IBar。在RhinoMocks我只想做到像如下,它的工作好了:

var mock = MockRepository.GenerateMock<IBar>(); 
var foo = new Foo(mock); 

然而,起訂量這似乎並沒有以相同的方式工作。我做如下:

var mock = new Mock<IBar>(); 
var foo = new Foo(mock); 

不過,現在它失敗 - 告訴我「無法從‘Moq.Mock’到‘伊巴爾’什麼我做錯了什麼轉換是這樣做的推薦的方法?與起訂量?

回答

67

你需要穿過的模擬

var mock = new Mock<IBar>(); 
var foo = new Foo(mock.Object); 

對象實例,您還可以使用模擬對象訪問實例的方法。

mock.Object.GetFoo(); 

moq docs

14
var mock = new Mock<IBar>().Object 
+0

+1爲是隻有10個答案,這將是一個公認的後面秒。謝謝! – stiank81

+2

我通常不會將對象實例指定給像這樣的變量,因爲您可能需要爲特定行爲設置模擬。 – skyfoot

+0

這只是爲了顯示.Object,這是他遇到的運行時錯誤的解決方案:-) –