这通常是通过部分模拟来完成的,它们可能有点恶心。
首先,您要模拟的方法必须是虚拟的。否则 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 Rhino Mocks 语法。如果您更喜欢使用录制/播放,您也可以使用它。
所以你会这样做。一个可能更好的解决方案是 ifScreenshotMode
是一个枚举并且您可以使用 C# 4,只需将其设为可选参数:
public Image Get(BrowserName browser, ScreenshotMode mode = ScreenshotMode.Regular)
{
//Omitted code.
}
现在你没有两个方法,所以没有必要测试一个调用另一个。