不使用 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
。如果删除轮询参数,它应该只 运行 在所需时间后执行操作。
如果在编写一些 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
。如果删除轮询参数,它应该只 运行 在所需时间后执行操作。