犀牛模拟中基类型参数的拼合方法

时间:2015-02-12 14:52:38

标签: c# rhino-mocks

我正在尝试使用基类参数存根模拟,并让它为每个调用返回相同的值。我似乎无法让它正常工作,我无法在谷歌上得到正确的措辞。

基本数据结构

public abstract class Base { }

public class BaseImplA : Base { } 
public class BaseImplB : Base { } 

public interface IDoStuff 
{ 
  bool DoStuff(Base b); 
}

实现:

var MockDoStuff = MockRepository.GenerateMock<IDoStuff>();

MockDoStuff.Stub(x => x.DoStuff<Arg<Base>.Is.TypeOf);
           .Return(true);

存根没有返回true,因为它的类型检查是BaseImpl而不是Base

我需要更改什么才能让它接受Base而不是为我的每个BaseImpl - esque类型添加存根?

1 个答案:

答案 0 :(得分:1)

示例实现代码中存在语法错误。此外,为了设置Mock的具体方法以返回值,必须将目标方法标记为Virtual或Override。

以下是应该按照需要运行的代码:

public abstract class Base { }

public class BaseImplA : Base { }
public class BaseImplB : Base { }

public class IDoStuff
{
    public virtual bool DoStuff(Base b)
    {
        return true;
    }
} 

实施

public void TestMethod1()
{
    var mockDoStuff = MockRepository.GenerateMock<IDoStuff>();

    mockDoStuff.Stub(x => x.DoStuff(Arg<Base>.Is.Anything)).Return(true);

    Assert.IsTrue(mockDoStuff.DoStuff(new BaseImplA()));
}