При использовании счетчика вызовов метода Moq Verify() сообщение об ошибке теста, содержащего ошибку, содержит фактический счет вызовов метода с использованием Moq.

Рассмотрим следующее, где я проверяю, что метод внедренной зависимости вызывается определенное количество раз:

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

Когда я принудительно проваливаю тест, вывод:

Moq.MockException: вызов не был выполнен на макете 1 раз: e => e.Blink()

Что было бы лучше, это что-то вроде:

Moq.MockException: вызов был неожиданно выполнен 2 раза, а не 1 раз: e => e.Blink()

Вот элементы, связанные с тестом:

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();
    }
}

Можно ли собрать и отобразить фактическое количество вызовов метода зависимости в сообщении об ошибке неудачного теста?

Я не уверен, что это имеет значение, но я использую Moq v3.1.416.3 (не последнюю, я знаю, но другая библиотека, которую я использую, еще не обновилась до Moq 4.x…)

1 ответ

Решение

Я не знаю прямого способа собрать информацию в Moq3. что я хотел бы сделать, это использовать обратный вызов на настройке Blink

  int count = 0;
  employee.Setup(e => e.Blink()).Callback(() => count++);

  ...
  employee.Verify(e => e.Blink(), Times.Exactly(1), "Moq.MockException: Invocation was unexpectedly performed " + count + " times, not 1 time: e => e.Blink()"); // Fails as expected
Другие вопросы по тегам