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.
InformationsquelleAutor Jeff | 2013-05-22
Schreibe einen Kommentar