是否可以使用Rhino.Mocks模拟具有属性的类型

时间:2011-09-28 19:35:07

标签: .net rhino-mocks

我有这种类型:

[RequiresAuthentication]
public class MobileRunReportHandler : IMobileRunReportHandler
{
  public void Post(MobileRunReport report)
  {
    ...
  }
}

我这样嘲笑:

var handler = MockRepository.GenerateStub<IMobileRunReportHandler>();
handler.Stub(x => x.Post(mobileRunReport));

问题是生成的模拟不归因于RequiresAuthentication属性。我该如何解决?

感谢。

修改

我希望将模拟类型归因于RequiresAuthentication属性,因为我正在测试的代码使用了此属性。我想知道如何更改我的模拟代码,以指示模拟框架相应地对生成的模拟进行属性化。

1 个答案:

答案 0 :(得分:1)

在运行时向类型添加Attribute,然后使用反射获取它是不可能的(参见例如this post)。将RequiresAuthentication属性添加到存根的最简单方法是自己创建此存根:

// Define this class in your test library.
[RequiresAuthentication]
public class MobileRunReportHandlerStub : IMobileRunReportHandler
{
    // Note that the method is virtual. Otherwise it cannot be mocked.
    public virtual void Post(MobileRunReport report)
    {
        ...
    }
}

...

var handler = MockRepository.GenerateStub<MobileRunReportHandlerStub>();
handler.Stub(x => x.Post(mobileRunReport));

或者您可以为MobileRunReportHandler类型生成存根。但是你必须使用Post方法virtual

[RequiresAuthentication]
public class MobileRunReportHandler : IMobileRunReportHandler
{
    public virtual void Post(MobileRunReport report)
    {
        ...
    }
}

...

var handler = MockRepository.GenerateStub<MobileRunReportHandler>();
handler.Stub(x => x.Post(mobileRunReport));