Rhino Mocks-设置非虚拟方法的结果 [英] Rhino Mocks - Setting up results for non-virtual methods
问题描述
我正在与Rhino Mocks玩耍,并尝试在模拟对象上设置一些虚拟结果,因此在工厂方法中调用它们时,我不必担心数据.
I'm playing around with Rhino Mocks and am trying to set some dummy results on my mocked objects so when they are called in my factory methods I don't have to worry about the data.
但是我遇到了一个麻烦,我想获得虚拟结果的方法正在引起异常,因为它们不是 virtual .
But I've hit a snag, the methods I want to have the dummy results for are causing exceptions because they aren't virtual.
我有这样的代码:
using(mock.Record()){
SetupResult.For(service.SomeMethod()).Return("hello world");
}
SomeMethod
方法是否必须是虚拟的才能产生模拟结果?
Does the SomeMethod
method have to be a virtual to be have a mocked result?
还有,SetupResult.For
和Expect.Call
有什么区别?
推荐答案
Rhino Mocks使用DynamicProxy2做到了魔术,因此您将无法对非虚拟方法设置期望/结果.
Rhino Mocks uses DynamicProxy2 to do it's magic, so you will not be able to set up expectations/results on non-virtual methods.
关于SetupResult.For
和Expect.Call
之间的区别,如果您希望在未调用方法的情况下使测试失败,请使用Expect.Call
.如果您只想提供模拟对象的结果,并且不想被未调用而失败,请使用SetupResult.For
As for the difference between SetupResult.For
, and Expect.Call
if you want your test to fail validation if a method is not called, use Expect.Call
. If you just want to provide a result from your mock object, and you don't want to fail verification if it is not called, use 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-设置非虚拟方法的结果的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!