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

.net Rhino Mocks-为非虚拟方法设置结果,.net,mocking,rhino-mocks,.net,Mocking,Rhino Mocks,我在玩Rhino Mock,试图在我的模拟对象上设置一些虚拟结果,这样当它们在我的工厂方法中被调用时,我就不必担心数据了 但是我遇到了一个障碍,我想要得到虚拟结果的方法导致了异常,因为它们不是虚拟的 我有这样的代码: using(mock.Record()){ SetupResult.For(service.SomeMethod()).Return("hello world"); } SomeMethod方法必须是虚拟的才能有模拟结果吗 另外,SetupResult.For和Expect.

我在玩Rhino Mock,试图在我的模拟对象上设置一些虚拟结果,这样当它们在我的工厂方法中被调用时,我就不必担心数据了

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

我有这样的代码:

using(mock.Record()){
  SetupResult.For(service.SomeMethod()).Return("hello world");
}
SomeMethod方法必须是虚拟的才能有模拟结果吗


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

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

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

这有意义吗?

Rhino Mocks使用DynamicProxy 2来实现它的魔力,因此您将无法在非虚拟方法上设置期望值/结果

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

这有道理吗?

谢谢,这就很好地解释了。当我发现这个的时候,我正在比较Typemock和Rhino Mock。Typemock可以模拟非虚拟对象,所以到目前为止,它在我的书中是一个加号。谢谢,这很好地解释了这一点。当我发现这个的时候,我正在比较Typemock和Rhino Mock。Typemock可以模拟非虚拟对象,所以到目前为止,它在我的书中是一个加号。