我正在寻找一种简洁的方法,让存根的返回值取决于它的输入。
目前我正在使用以下方法,这种方法不会很好。
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 });
有什么建议吗?
答案 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.Make
和args.Vehicle2.Make
。
P.S。
如果您只需要设置Stub,则无需使用Expect()
方法。您可以改为使用Stub()
。