При использовании счетчика вызовов метода 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