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

时间:2013-11-29 09:19:06

标签: c# testing continuous-integration integration xunit.net

我使用xUnit.net设置了集成测试。

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

4 个答案:

答案 0 :(得分:6)

看来,您要找的是Timeout属性的Fact参数。

有关详细信息,请参阅确保测试不会运行太长下的XUnit Docs

答案 1 :(得分:6)

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

答案 2 :(得分:5)

对于较新的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.");
        }
    }
}

您可以像这样使用它:

[Fact]
public void TestMethod()
{
    AssertAsync.CompletesIn(2, () =>
    {
        RunTaskThatMightNotComplete();
    });
}

但是,请确保read the reason首先解释为什么删除它,因为项目的维护者之一确实对可能导致测试运行死锁的问题提出了一个很好的观点。我在单线程模式下运行这些测试,但它似乎不会导致问题。

答案 3 :(得分:0)

举一个具体的例子:

您可以使用

[Fact(timeout=2000)]

例如。

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