Sto provando a trasferire le chiamate a un oggetto falso all'implementazione effettiva. La ragione di questo è che voglio essere in grado di utilizzare WasToldTo e WhenToldTo di Machine.Specifications che funziona solo su falsi di un tipo di interfaccia.Metodi del proxy FakeItEasy chiamate all'implementazione reale
Pertanto, eseguo le operazioni seguenti per trasferire tutte le chiamate al mio oggetto reale.
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;
}
Vorrei usarlo così.
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());
Il problema però è che questo funziona solo per i metodi vuoti, dal momento che il metodo richiama non sta facendo nulla con il valore di ritorno. (Parametro di azione anziché Func)
Quindi stavo cercando di farlo utilizzando il metodo 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;
}
Tuttavia, il metodo richiama ancora non funziona il modo in cui lo voglio (ancora azione invece di Func). Quindi il valore di ritorno non è ancora utilizzato.
C'è un modo per raggiungere questo con l'ultima versione attuale?
Ho già archiviato un problema nel repository github FakeItEasy. https://github.com/FakeItEasy/FakeItEasy/issues/435
Grazie, L'approccio di avvolgimento risolve il problema. –