gpt4 book ai didi

unit-testing - 使用 Moq Verify() 方法调用计数时,失败测试的错误消息包含使用 Moq 的实际方法调用计数

转载 作者:行者123 更新时间:2023-12-04 03:21:45 25 4
gpt4 key购买 nike

考虑以下情况,我正在测试注入(inject)的依赖项的方法是否被调用了特定次数:

[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: Invocation was not performed on the mock 1 times: e => e.Blink()



更好的是:

Moq.MockException: Invocation was unexpectedly performed 2 times, not 1 time: 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……)

最佳答案

我不知道在 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

关于unit-testing - 使用 Moq Verify() 方法调用计数时,失败测试的错误消息包含使用 Moq 的实际方法调用计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16693078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com