Bei der Verwendung von Moq Verify () - Methode invocation count, andernfalls testen Sie die Fehlermeldung enthalten die tatsächlichen method invocation count mit Moq
Betrachten Sie den folgenden, wo ich die Prüfung, dass eine injizierte Abhängigkeit die Methode aufgerufen wird, eine bestimmte Anzahl von Zeiten:
[Fact]
public void WhenBossTalksEmployeeBlinksTwice()
{
//arrange
var employee = new Mock<IEmployee>();
employee.Setup(e => e.Blink());
var boss = new Boss(employee.Object);
//act
boss.Talk();
//assert
employee.Verify(e => e.Blink(), Times.Exactly(2)); //Passes as expected
employee.Verify(e => e.Blink(), Times.Exactly(1)); //Fails as expected
}
Wenn ich Kraft den fehlerhaften test, die Ausgabe ist:
Moq.MockException: Aufruf wurde nicht ausgeführt, auf dem mock 1 mal: e
=> e -.Blink()
Was besser wäre etwas wie:
Moq.MockException: Aufruf war unerwartet durchgeführt, 2 mal, nicht 1 mal: e
=> e -.Blink()
Hier sind die Elemente mit den beteiligten test:
public interface IEmployee { void Blink(); }
public class Boss {
private readonly IEmployee _employee;
public Boss(IEmployee employee) { _employee = employee; }
public void Talk() {
_employee.Blink();
_employee.Blink();
}
}
Ist es möglich, bis zur Ernte und zeigt die tatsächliche Anzahl der Zeiten, die die Abhängigkeit der Methode aufgerufen wurde, in den fehlerhaften test die Fehlermeldung?
Ich bin mir nicht sicher, dass es darauf ankommt, aber ich bin mit Moq v3.1.416.3 (nicht die neueste, ich weiß, aber eine andere Bibliothek, die ich verwende noch nicht aktualisiert Moq 4.x noch nicht...)
- +1 für das Beispiel-code 🙂
- Da fand ich diese in meinem googeln, ich dachte, ich würde ein update geben. In Moq v4.1 (und vielleicht in alle 4.x) bekommen Sie etwas wie: "erwartet den Aufruf auf der mock einmal, sondern wurde 0 mal". Also die Antwort auf diese Frage ist nun out of the box.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, der eine gerade Weg, um die Ernte der Informationen in Moq3.
was ich tun würde, ist ein Rückruf auf die setup-Blink