NUnit Throws.Nothing.After(,)测试第一次失败

时间:2017-01-22 20:56:36

标签: unit-testing nunit

我有一个NUnit测试,有时会在开始时抛出异常,所以我想在使用.After约束的延迟和间隔的超时中包装它。

这不是确切的代码,但它是我正在谈论并试图实现的一个例子。

[Test]
public void ThrowsNothingAfterTest()
{
    var i = 0;
    Assert.That(() =>
    {
        if (i == 1)
        {
            return true;
        }

        i++;
        throw new NotImplementedException();
    }, Throws.Nothing.After(1000, 100));
}

我认为上面的测试会在第一次失败然后经过一段时间,但它只运行一次并失败。

1 个答案:

答案 0 :(得分:2)

After可能在功能上与Throws.Nothing不一致。我们应该检查一下,并可能找出一种方法使它在语法上不可能。

您所使用的语法是:每隔100毫秒继续尝试此调用,直至不抛出,最多1000毫秒(10次)。这对你的例子是无害的,但在许多情况下是不可取的。这就是为什么我倾向于使其不可编辑而不是使其工作。 : - (

如果您可以编写代码以在初始化服务时返回true,那么您只需使用

即可
Assert.That(() => IsServiceUpAndRunning(),
            After(1).Seconds.PollEvery(10).Milliseconds);

如果抛出异常,只需在方法中捕获它并返回false。