如果在编写一些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()
多次执行。
答案 0 :(得分:2)
基本上问题是您使用的是包含轮询的Is.True.After
。通过传递Action<bool>
,必须调用该操作来测试它是true
。这将导致多次通话,您的count
会上升,最终会返回true
。如果删除轮询参数,则只应在所需时间后运行操作。