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

有什么建议么?

4

1 回答 1

9

当存根返回或存根操作应取决于参数时,您可以在 github 上使用Do handler few examples

关于你的例子。
我的假设是:
有一些类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.Make和 for args.Vehicle2.Make

PS
如果您只需要设置存根,则不需要使用Expect()方法。你可以Stub()改用。

于 2012-11-24T10:04:20.810 回答