Lors de l'utilisation de Moq Vérifier() invocation de méthode de comptage, ont test en échec de message d'erreur contenant aucune invocation de méthode de comptage à l'aide de Moq

Considérer le suivant, où je suis en train de tester que l'injection d'une dépendance de la méthode est appelée un nombre spécifique de fois:

[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
}

Quand je force le test en échec, la sortie est:

Moq.MockException: Invocation n'a pas été effectuée sur la maquette 1 fois: e
=> e.Blink()

Ce qui serait mieux, c'est quelque chose comme:

Moq.MockException: l'Invocation est de façon inattendue réalisée 2 fois, 1 fois: e
=> e.Blink()

Ici sont les éléments concernés par le 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();
    }
}

Est-il possible de récolter et d'afficher le nombre de fois que la dépendance de la méthode a été appelée, dans le test en échec du message d'erreur?

Je ne suis pas sûr que ça compte, mais je suis en utilisant Moq v3.1.416.3 (pas la dernière, je sais, mais d'une autre bibliothèque que j'utilise n'a pas mis à jour pour Moq 4.x encore...)

+1 pour l'exemple de code 🙂
Depuis que j'ai découvert dans mes recherches sur google, j'ai pensé que je pourrais fournir une mise à jour. Dans Moq v4.1 (et peut-être dans tous les 4.x) vous obtenez quelque chose comme: "attendu invocation sur la maquette une fois, mais a été 0 fois". Donc, la réponse à cette question est maintenant hors de la boîte.

OriginalL'auteur Jeff | 2013-05-22