不使用 lambda 表达式进行断言时 NUnit 测试失败

NUnit test fails when not using lambda expression for assertion

如果在编写一些 NUnit 测试时遇到奇怪的问题。测试比较复杂,但我将其分解为以下代码。

[Test]
public void MyTest()
{
    // Assert.That(test(), Is.True.After(1000, 100)); // Fail
    Assert.That(() => test(), Is.True.After(1000, 100)); // Success
}

static int count = 0;

bool test()
{
    Console.WriteLine(++count);
    if (count == 2)
        return true;
    return false;
}

为什么只有使用lambda表达式才能测试成功?

编辑:

为了更清楚: 在第一行中,似乎 test() 只执行一次,而 () => test() 执行多次。

基本上问题是您使用的 Is.True.After 包括轮询。通过传入 Action<bool>,它必须调用该操作来测试它是否为 true。这将导致多次调用,您的 count 会上升,最终会 return true。如果删除轮询参数,它应该只 运行 在所需时间后执行操作。