這就是通常與部分模擬完成,他們可以是一個有點噁心的。
首先,您嘲笑的方法必須是纔是虛擬的。否則Rhino Mocks不能攔截該方法。所以讓我們將您的代碼更改爲:
public Image Get(BrowserName browser)
{
// if no screenshot mode specified it means that regular screenshot needed
return this.Get(browser, ScreenshotMode.Regular);
}
public virtual Image Get(BrowserName browser, ScreenshotMode mode) {
// some code omitted here
}
請注意,第二種方法現在是虛擬的。然後,我們可以設置我們的部分模擬像這樣:
//Arrange
var yourClass = MockRepository.GeneratePartialMock<YourClass>();
var bn = new BrowserName();
yourClass.Expect(m => m.Get(bn, ScreenshotMode.Regular));
//Act
yourClass.Get(bn);
//Assert
yourClass.VerifyAllExpectations();
,與AAA犀牛嘲笑語法的。如果您喜歡使用錄製/回放,您也可以使用它。
所以這就是你將如何做到這一點。一個可能更好的解決辦法是,如果ScreenshotMode
是一個枚舉,你有C#4在您的處置,只讓它作爲一個可選的參數:
public Image Get(BrowserName browser, ScreenshotMode mode = ScreenshotMode.Regular)
{
//Omitted code.
}
現在,你不必有兩種方法,所以沒有必要測試一個叫另一個。除了製作方式虛擬(如vcsjones解釋)
爲什麼不讓它調用一個通用的私有方法? – 2012-08-09 15:57:49