私は実際の実装に対して偽のオブジェクトへの呼び出しをプロキシしようとしています。これは、インターフェイスタイプの偽物に対してのみ機能するMachine.SpecificationsのWasToldToとWhenToldToを使用できるようにするためです。FakeItEasyプロキシメソッドが実際の実装を呼び出す
したがって、私は実際のオブジェクトへのすべての呼び出しをプロキシするために次のことを行います。
public static TFake Proxy<TFake, TInstance>(TFake fake, TInstance instance) where TInstance : TFake
{
fake.Configure().AnyCall().Invokes(x => x.Method.Invoke(instance, x.Arguments.ToArray()));
return fake;
}
このように使用します。
var fake = Proxy<ISomeInterface, SomeImplementation>(A.Fake<ISomeInterface>(), new SomeImplementation());
//in my assertions using Machine.Specifications (reason I need a fake of an interface)
fake.WasToldTo(x => x.DoOperation());
しかし、この問題は、Invokesメソッドが戻り値で何も実行していないため、voidメソッドでのみ機能することになります。 (Funcの代わりにAction param)
次に、私はWithReturnValueメソッドを使ってこれをしようとしていました。
public static TFake Proxy(TFake fake, TInstance instance) where TInstance : TFake
{
fake.Configure().AnyCall()..WithReturnType().Invokes(x => x.Method.Invoke(instance, x.Arguments.ToArray()));
fake.Configure().AnyCall()..WithReturnType().Invokes(x => x.Method.Invoke(instance, x.Arguments.ToArray()));
fake.Configure().AnyCall()..WithReturnType().Invokes(x => x.Method.Invoke(instance, x.Arguments.ToArray()));
//etc.
return fake;
}
しかし、Invokesメソッドはまだ私が望む方法では機能しません(FuncではなくActionです)。したがって、戻り値はまだ使用されていません。
これを最新の最新バージョンで実現する方法はありますか?
私はすでにFakeItEasy githubリポジトリに問題を提出しました。 https://github.com/FakeItEasy/FakeItEasy/issues/435
です。ありがとう、ラッピングのアプローチは私の問題を解決します。 –