Come si dovrebbe fare per falsificare il seguente:Falsificare un metodo generico FakeItEasy
public interface IBlah
{
Func<T, bool> ApplyFilter<T>(Func<T, bool> predicate) where T:IMessage;
}
Quello che vorrei è per il falso per tornare semplicemente si tratta di argomento senza alcuna modifica. Tuttavia, vorrei verificare che il falso sia stato chiamato esattamente una volta. Un caso d'uso è il seguente:
public class Something
{
public Something(IBlah blah) { _blah = blah; }
public bool DoSomething(SomeValue m, Func<SomeValue, bool> predicate)
{
Func<SomeValue, bool> handler = _blah.ApplyFilter(predicate);
return handler(m);
}
}
cioè i bisogni falsi per agire come un passaggio attraverso ma devono anche essere in grado di verificare che è stato utilizzato.
Qual è il modo migliore per farlo?
[Si prega di non preoccuparsi per l'esempio inventato ... ci sono un sacco di cose in corso sotto le coperte, ma ho semplificato verso il basso per l'esempio di cui sopra.]
Vuoi verificare che è utilizzato non più di una volta, usato almeno una volta, o utilizzato una sola volta? Cosa dovrebbe accadere se non soddisfa questa condizione? Questa interfaccia dovrebbe avere una proprietà 'numInvocations'? Puoi verificare che non sarà chiamato * più * di una volta abbastanza facilmente, ma sapendo se non è stato chiamato ... hai bisogno di un modo per fornire feedback. – Servy
Senza generici coinvolti, posso fare lo stesso con var falso = A.Fake(); A.CallTo (() ==> fake.SomeMethod (A ._)) .ReturnsLazily (x => x.GetArgument (0)); .... A.CallTo (fake) .MustHaveHappened (Repeated.Exactly.Once); Non riesco a capire come fare lo stesso con Func generico. Ho provato a creare un'implementazione fittizia dell'interfaccia e questo può fare il passaggio, ma dal momento che è concreto, FakeItEasy non può verificare che sia stato usato. –
ashic
Pertanto, è necessario assicurarsi che avvenga esattamente una volta che si desidera che il metodo restituisca una classe con due proprietà, 'NumInvokations' e questa funzione. Passare la funzione altrove, quindi determinare se 'NumInvokations' è uguale a uno in seguito. – Servy