我正在寻找一种让存根的返回值取决于其输入的干净方法。
目前使用以下方法,该方法无法很好地吸引。
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.Make
和args.Vehicle2.Make
。
P.S。
如果您只需要设置存根,则无需使用Expect()
方法。您可以改用Stub()
。