犀牛嘲笑,存根的返回值应该取决于输入

时间:2012-11-07 13:52:59

标签: rhino-mocks

我正在寻找一种简洁的方法,让存根的返回值取决于它的输入。

目前我正在使用以下方法,这种方法不会很好。

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 });

有什么建议吗?

1 个答案:

答案 0 :(得分:9)

当Stub返回或存根操作依赖于参数时,您可以使用 Do handler 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>();

如果您只需要设置一个Stub,它返回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。
如果您只需要设置Stub,则无需使用Expect()方法。您可以改为使用Stub()