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 ハンドラーのいくつかの例を使用できます。

あなたの例について。
私の仮定は次のとおりです。次のような
いくつかのクラス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 }));

残念ながら、デリゲートへの明示的なキャスト ラムダ式が必要です。

私の例のスタブはどの引数でも機能しますが、あなたの例のスタブはargs.Vehicle1.Makeと に対してのみ機能することに注意してくださいargs.Vehicle2.Make

PS
Stub をセットアップするだけでよい場合は、メソッドを使用する必要はありませんExpect()。代わりに使用できますStub()

于 2012-11-24T10:04:20.810 に答える