犀牛模拟,存根的返回值应取决于输入



我正在寻找一种让存根的返回值取决于其输入的干净方法。

目前使用以下方法,该方法无法很好地吸引。

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

有什么建议?

当存根返回或存根动作应取决于参数时,您可以使用 do handler github上的几个示例

关于您的榜样。
我的假设是:
有一些类CarMake和接口IMetadataLogic如下:

class CarMake
{
    public string Id { get; set; }
}
interface IMetadataLogic
{
    CarMake GetMake(string id);
}

metadataLogic

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

如果您只需要设置一个用指定Id返回CarMake实例的存根,那么您可以做这样的事情:

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

不幸的是,有必要明确的cast lambda表达式。

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

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

最新更新