犀牛模拟使用期待新的'方法调用

时间:2012-06-21 09:08:20

标签: c# .net rhino-mocks

是否有可能在犀牛模拟中做某种形式的期待。

示例:

public void ToBeTested()
{
     ClassForExmaple classForExample = new ClassForExample();

     //Other logic.....
}

所以我希望我的单元测试调用ToBeTested(),但是当调用新的ClassForExample时,我希望它返回一个模拟版本。

2 个答案:

答案 0 :(得分:1)

我没有使用Rhino mock,我不确定这是否是RhinoMock支持的东西,但是对象的创建控制嵌入在方法中的事实违反了DI / IOC的原则,因此是更难测试..理想情况下,类应该通过包含类的构造函数或方法本身注入到方法中。

因此

class A
{
    IClassForExample _classForExample;
    public A(IClassForExample classForExample)
    {
      _classForExample=classForExample;
    }
    public void ToBeTested()
    {
         var classForExample = _classForExample;

         //Other logic.....
    }
}

RhinoSupport是否扩展了非抽象/接口类 - 我不确定这个问题,但我确信它可以模拟接口。

答案 1 :(得分:0)

不,这是不可能的,出于同样的原因,你不能指望static事情:它不会在实例上被调用。

如果你想对你测试过的代码中构建的对象使用mock,你应该有这样的东西:

internal virtual ClassForExample NewClassForExempe()
{
    return new ClassForExample();
}

然后在测试中模拟此方法。

注意:假设您在类的InternalsVisibleToAttribute中声明了rhino mocks,我将该方法设置为内部。否则你将不得不公开。