Wie würden Sie fälschen die folgenden gehen:Faking eine generische Methode FakeItEasy
public interface IBlah
{
Func<T, bool> ApplyFilter<T>(Func<T, bool> predicate) where T:IMessage;
}
Was ich möchte, ist, dass die Fälschung einfach zurückzuversetzen Argument ist ohne Änderungen. Ich möchte jedoch überprüfen, dass die Fälschung genau einmal aufgerufen wurde. Ein Anwendungsfall ist unten angegeben:
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);
}
}
das heißt die falschen Bedürfnisse als Pass zu handeln durch, aber ich brauche auch verwendet worden, um es zu überprüfen, um die Lage sein wird.
Was ist der beste Weg, um darüber zu gehen?
[Bitte sorgen Sie sich nicht um das erfundene Beispiel ... es gibt eine Menge Dinge, unter der Decke gehen, aber ich habe es vereinfacht oben auf das Beispiel unten.]
tun, dass es nicht mehr als einmal, verwendet wird, mindestens einmal oder verwendet genau einmal verwendet? Was sollte passieren, wenn es diese Bedingung nicht erfüllt? Sollte diese Schnittstelle eine 'numInvocations'-Eigenschaft haben? Sie können verifizieren, dass es nicht mehr als einmal einfach * mehr * genannt wird, aber wenn Sie wissen, ob es nicht aufgerufen wurde, brauchen Sie eine Möglichkeit, Feedback zu geben. – Servy
Ohne Generika beteiligt, kann ich das gleiche tun mit var fake = A.Fake(); A.CallTo (() ==> fake.SomeMethod (A ._)) .ReturnsLazily (x => x.GetArgument (0)); .... A.CallTo (Fälschung) .MustHaveHappened (Repeated.Exactly.Once); Ich kann nicht herausfinden, wie das gleiche mit der Func Generika zu tun ist dort. Ich habe versucht, eine Dummy-Implementierung der Schnittstelle zu erstellen, und das kann die Durchleitung tun, aber da das konkret ist, kann FakeItEasy nicht überprüfen, dass es verwendet wurde. –
ashic
Wenn Sie also sicherstellen müssen, dass es genau einmal passiert ist, soll die Methode eine Klasse zurückgeben, die zwei Eigenschaften hat, "NumInvokations" und diese Funktion. Übergeben Sie die Funktion an anderer Stelle, und stellen Sie fest, ob 'NumInvokations' danach gleich Eins ist. – Servy