我正在玩Rhino Mocks并试图在我的模拟对象上设置一些虚拟结果,因此当我在工厂方法中调用它们时,我不必担心数据。
但是我遇到了障碍,我希望得到虚拟结果的方法会导致异常,因为它们不是虚拟。
我有这样的代码:
using(mock.Record()){
SetupResult.For(service.SomeMethod()).Return("hello world");
}
SomeMethod
方法必须是虚拟的,才能获得模拟结果吗?
另外,SetupResult.For
和Expect.Call
之间有什么区别?
答案 0 :(得分:4)
Rhino Mocks使用DynamicProxy2来实现它的神奇功能,因此您将无法在非虚拟方法上设置期望/结果。
至于SetupResult.For
和Expect.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()
}
这有意义吗?