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



我有一个 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));
}

我假设上面的测试第一次会失败,然后通过时间,但它只运行一次并且失败。

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

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

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

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

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

相关内容

最新更新