Jef*_*eff 10 unit-testing moq mocking moq-3
考虑以下内容,我在测试注入依赖项的方法被调用特定次数:
[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
}
Run Code Online (Sandbox Code Playgroud)
当我强制执行失败测试时,输出为:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
在失败测试的错误消息中,是否可以收集并显示调用依赖项方法的实际次数?
我不确定它是否重要,但我使用的是Moq v3.1.416.3(不是最新的,我知道,但我使用的另一个库还没有更新到Moq 4.x但是......)
小智 15
我不知道在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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13040 次 |
| 最近记录: |