2012-11-07 57 views
4

我正在寻找一种干净的方式让存根的返回值取决于其输入。犀牛嘲笑,存根的返回值应取决于输入

现在我使用下面的方法,它不能很好地完成。

metadataLogic.Expect(x => x.GetMake(args.Vehicle1.Make)).Return(new CarMake { Id = args.Vehicle1.Make }); 
metadataLogic.Expect(x => x.GetMake(args.Vehicle2.Make)).Return(new CarMake { Id = args.Vehicle2.Make }); 

有什么建议吗?

回答

9

当存根退货或短线操作应取决于参数,那么你可以使用待办事项处理few examples on github

关于你的榜样。
我的假设是:
有一些类CarMake和接口IMetadataLogic像下面这样:

class CarMake 
{ 
    public string Id { get; set; } 
} 

interface IMetadataLogic 
{ 
    CarMake GetMake(string id); 
} 

而且metadataLogic

var metadataLogic = MockRepository.GenerateStub<IMetadataLogic>(); 

如果您只是需要安装一个存根返回CarMake实例与指定Id那么你可以这样做:

metadataLogic 
    .Stub(x => x.GetMake(Arg<string>.Is.Anything)) 
    .Do((Func<string, CarMake>)(id => new CarMake { Id = id })); 

不幸的是,将显式lambda表达式委托给委托是必要的。

请注意我的示例中的存根可用于任何参数,但在您的示例中存根仅适用于args.Vehicle1.Makeargs.Vehicle2.Make

P.S.
如果您需要设置存根,则不需要使用Expect()方法。您可以改为使用Stub()