Rhino Mocks-设置非虚拟方法的结果 [英] Rhino Mocks - Setting up results for non-virtual methods

查看:87
本文介绍了Rhino Mocks-设置非虚拟方法的结果的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在与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.ForExpect.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.ForExpect.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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆