我有这种类型:
[RequiresAuthentication]
public class MobileRunReportHandler : IMobileRunReportHandler
{
public void Post(MobileRunReport report)
{
...
}
}
我这样嘲笑:
var handler = MockRepository.GenerateStub<IMobileRunReportHandler>();
handler.Stub(x => x.Post(mobileRunReport));
问题是生成的模拟不归因于RequiresAuthentication
属性。我该如何解决?
感谢。
修改
我希望将模拟类型归因于RequiresAuthentication
属性,因为我正在测试的代码使用了此属性。我想知道如何更改我的模拟代码,以指示模拟框架相应地对生成的模拟进行属性化。
答案 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));