1

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

但是我遇到了一个障碍,我想要获得虚拟结果的方法会导致异常,因为它们不是virtual

我有这样的代码:

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

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

SetupResult.For另外,和有什么区别Expect.Call

4

1 回答 1

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()
}

那有意义吗?

于 2008-12-05T05:57:06.820 回答