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

时间:2015-09-24 12:40:11

标签: c# testing lambda nunit assert

如果在编写一些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()多次执行。

1 个答案:

答案 0 :(得分:2)

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