xUnit.net如何指定测试最长需要的超时时间

cod*_*uit 8 c# testing integration continuous-integration xunit.net

我有使用xUnit.net设置的集成测试.

有没有办法配置集成测试应该持续多长时间?我是指一个门槛.

小智 9

举一个具体的例子:

你可以只使用

[Fact(Timeout = 2000)]
Run Code Online (Sandbox Code Playgroud)

例如。

提示:超时以毫秒为单位指定。


小智 8

看来,你要找的是属性的Timeout参数Fact.

欲了解更多信息,请参阅的xUnit文档确保了测试并不太长的.

  • 答案根本没有帮助。该链接指向文档页面,但不是特定的文章。然而,文档中似乎没有关于“Fact”参数的具体文章。 (4认同)
  • 我认为有必要在“Fact”文档中添加指向特定文章的链接,并在此处添加该文章的摘录。 (2认同)

Ste*_*uts 8

对于较新的xunit版本,我使用的方法似乎运行良好:

public static class AssertAsync
{
    public static void CompletesIn(int timeout, Action action)
    {
        var task = Task.Run(action);
        var completedInTime = Task.WaitAll(new[] { task }, TimeSpan.FromSeconds(timeout));

        if (task.Exception != null)
        {
            if (task.Exception.InnerExceptions.Count == 1)
            {
                throw task.Exception.InnerExceptions[0];
            }

            throw task.Exception;
        }

        if (!completedInTime)
        {
            throw new TimeoutException($"Task did not complete in {timeout} seconds.");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以像这样使用它:

[Fact]
public void TestMethod()
{
    AssertAsync.CompletesIn(2, () =>
    {
        RunTaskThatMightNotComplete();
    });
}
Run Code Online (Sandbox Code Playgroud)

但是,请务必先阅读之所以将其删除的原因,因为该项目的维护者之一确实对可能导致测试运行死锁的问题提出了一个很好的观点.我在单线程模式下运行这些测试,但似乎不会导致问题.

  • 看起来 xUnit 再次支持 [`[Fact(Timeout=milliseconds)]`](https://github.com/xunit/xunit/blob/42031495bc52d10d52733e4af9ea33a8c1257a05/src/xunit.v3.core/FactAttribute.cs#L32),但是仅适用于非并行运行。 (3认同)

Tim*_*Tim 7

不幸的是,在较新的版本中,Fact属性看起来不再具有 Timeout参数

  • 我认为他们在 2.4 中把它带回来了,但是对于并行执行,它的行为是“未定义的” (2认同)