Rhino Mocks - 为非虚拟方法设置结果

时间:2008-12-05 05:33:06

标签: .net mocking rhino-mocks

我正在玩Rhino Mocks并试图在我的模拟对象上设置一些虚拟结果,因此当我在工厂方法中调用它们时,我不必担心数据。

但是我遇到了障碍,我希望得到虚拟结果的方法会导致异常,因为它们不是虚拟

我有这样的代码:

using(mock.Record()){
  SetupResult.For(service.SomeMethod()).Return("hello world");
}

SomeMethod方法必须是虚拟的,才能获得模拟结果吗?

另外,SetupResult.ForExpect.Call之间有什么区别?

1 个答案:

答案 0 :(得分:4)

Rhino Mocks使用DynamicProxy2来实现它的神奇功能,因此您将无法在非虚拟方法上设置期望/结果。

至于SetupResult.ForExpect.Call之间的区别,如果您希望测试在未调用方法时失败,请使用Expect.Call。如果您只想提供模拟对象的结果,并且您不希望在未调用的情况下验证失败,请使用SetupResult.For

所以以下内容将会失败:

using(mock.Record()){
    Expect.Call(service.SomeMethod()).Return("you have to run me");
}

using(mock.Replay()){
    // Some code that never calls service.SomeMethod()
}

此测试不会:

using(mock.Record()){
    SetupResult.For(service.SomeMethod()).Return("you don't have to run me");
}

using(mock.Replay()) {
    // Some code that never calls service.SomeMethod()
}

这有意义吗?