Mit Moq, zu Verhöhnen, als eine Func - <> Konstruktor-parameter und Überprüfen Sie es zweimal genannt wurde
Genommen die Frage aus diesem Artikel (Wie moq eine Func) und passte es wie die Antwort ist nicht korrekt.
public class FooBar
{
private Func<IFooBarProxy> __fooBarProxyFactory;
public FooBar(Func<IFooBarProxy> fooBarProxyFactory)
{
_fooBarProxyFactory = fooBarProxyFactory;
}
public void Process()
{
_fooBarProxyFactory();
_fooBarProxyFactory();
}
}
Ich habe ein Bedürfnis, zu verhöhnen, als eine Func - <> übergeben wird als parameter des Konstruktors, die behaupten, dass die func war zweimal rufen.
Wenn Sie versuchen, zu verspotten die Funktion var funcMock = new Mock<Func<IFooBarProxy>>();
Moq wirft und Ausnahme, wie Sie die Func-Typ ist nicht mockable.
Das Problem ist, dass ohne Sie verspotten die func ist es nicht möglich zu überprüfen, ob die func aufgerufen wurde (n) Zeit. funcMock.Verify( (), Times.AtLeast(2));
- Moq unterstützt jetzt das, was der OP ursprünglich versucht, zu tun, siehe die Antwort von @ktam33
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass es nötig ist, um ein mock für die Func.
Können Sie einfach erstellen Sie eine gewöhnliche Func selbst, dass gibt ein mock
IFooBarProxy
:Als mindestens Moq 4.5.28, können Sie spotten und überprüfen Sie die Func als Sie erwarten würden, um in der Lage sein. Ich konnte nicht sagen, Wann dieses feature wurde Hinzugefügt (entsprechend der ursprünglichen Frage irgendwann funktionierte dies nicht).
Seit Moq v4.1.1308.2120
Dieser version, die veröffentlicht wurde, einige Monate nachdem diese Frage gestellt wurde (Aug 21, 2013), die Funktionalität zum simulieren Sie eine
Func<>
Hinzugefügt wurde. So mit jeder aktuellen version von mock, die Sie verwenden könnenvar funcMock = new Mock<Func<IFooBarProxy>>();
.Original (überholt) Antwort
Wenn Sie eine Menge von callback -
Func
's,Actions
usw, es ist besser zu definieren, ein Helfer-Schnittstelle in Ihre tests und mock-Schnittstelle. Auf diese Weise können Sie die regelmäßige Moq Funktionalität, wie z.B. das zurückgeben von Werten, testen von input-Argumente, etc.Nutzung