我有一个 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。