如何将单元测试编写为以下代码:

public Image Get(BrowserName browser)
{
    // if no screenshot mode specified it means that regular screenshot needed
    return this.Get(browser, ScreenshotMode.Regular);
}

public Image Get(BrowserName browser, ScreenshotMode mode) {
    // some code omitted here
}

最佳答案

通常这是通过部分模拟完成的,它们可能有点令人讨厌。

首先,您要模拟的方法必须是虚拟的。否则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语法。如果您喜欢使用记录/播放,也可以使用。



这就是您要执行的操作。一个可能更好的解决方案是,如果ScreenshotMode是一个枚举并且您拥有C#4,只需将其设为可选参数即可:

public Image Get(BrowserName browser, ScreenshotMode mode = ScreenshotMode.Regular)
{
    //Omitted code.
}


现在您没有两种方法,因此无需测试一个调用另一个方法。

关于c# - 验证对象在Rhino Mocks中调用自身,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11887199/

10-13 09:38