2012-11-07 55 views
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 }); 

有什麼建議嗎?

回答

9

當存根退貨或短線操作應取決於參數,那麼你可以使用待辦事項處理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>(); 

如果您只是需要安裝一個存根返回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.
如果您需要設置存根,則不需要使用Expect()方法。您可以改爲使用Stub()