如何:为运行测试设置时间限制

可以设置执行某个测试或测试运行时将要遵守的时间限制。 例如,如果您是在一个测试实验室里工作,并且需要在一天的某个时候完成测试运行,这种情况下就可能需要设置时间限制。

时间限制的另一应用场合是非响应性代码。 如果某个测试遇到了一段不进行响应的代码,则测试超时和测试运行超时设置会让这个测试完成,以便测试运行可以继续执行后续的测试。

有两种方法设置时间限制:

不能为特定的测试类型设置测试超时值。 测试超时值不应用于手动测试,但测试运行超时设置始终会起作用,即使测试运行中包含手动测试也是如此。

为测试和测试运行设置时间限制具有以下这些效果:

  • 当测试运行的持续时间达到其超时值时,即使测试运行中的某些测试还没有运行,也会中止测试运行。

  • 当个别测试的持续时间达到其超时值时,将停止执行该测试,并将其标记为**“超时”**。 测试运行将继续执行后续的测试。

初始化方法影响测试超时的方式

测试运行包括 AssemblyInitializeAttribute 方法和 ClassInitializeAttribute 方法。 如果对这些方法进行了定义,则将用有限的时间去完成,然后启动测试运行中的第一个测试。

初始化方法所用的时间将计入第一个测试所用的时间。 我们可以将它表达为一个使用以下这些术语的公式:

  • Dt = 总持续时间

  • Dr = 测试运行的时间

  • I = 程序集和类的初始化方法

  • Tn = 测试运行中在随意位置运行的测试

  • T1 = 测试运行中第一个运行的测试

下面的说明适用于第一个测试之后的所有测试:

Dt**[Tn] = Dr[Tn]**

但是,请注意以下情况:

Dt**[T1] = Dr[T1] + D[I]**

第一个运行的测试可能会分配有一个针对每个测试的超时值。 在这种情况下,由于初始化时间会计入对第一个测试施加的时间限制,因此会导致测试失败。

提示

此限制可能只会导致第一个测试失败, 而不会影响测试运行中后续的测试。

如果您的测试运行包括初始化方法,则可以采用以下方法来避开此限制:对每个测试都应用一个大于测试方法和任意初始化方法的预计执行时间之和的超时值。 必须为每个测试都执行此操作。 因为单元测试不能保证测试运行的顺序,您无法预测哪个测试将第一个运行。

清理方法影响测试运行超时值的方式

测试运行包括 AssemblyCleanupAttribute 方法和 ClassCleanupAttribute 方法。 这些方法完成之后,测试运行结束。

测试运行可能会分配有一个超时值。 清理方法所用的时间将计入测试运行所用的总时间。 换言之,清理时间将计入对整个测试运行施加的时间限制,因此可能导致测试运行超时。

设置测试运行超时值

  1. 打开“解决方案资源管理器”。

  2. 在解决方案的“解决方案项”文件夹中,双击测试设置文件。

    将显示**“配置设置”**对话框。

  3. 单击**“测试超时”**。

  4. 选中**“在总执行时间超过以下值时中止测试运行:”**。

  5. 按照小时、分钟和秒的格式设置测试运行超时值。

  6. 单击**“保存”,然后单击“关闭”**。

    若要使此设置生效,您所编辑的测试设置必须是活动的测试设置。 有关更多信息,请参见如何:从 Microsoft Visual Studio 应用测试设置

使用测试设置来设置每个测试的超时值

  1. 打开“解决方案资源管理器”。

  2. 在解决方案的“解决方案项”文件夹中,双击测试设置文件。

    随即出现**“测试设置”**对话框。

  3. 单击**“测试超时”**。

  4. 选中**“在单个测试的执行时间超过以下值时将该测试标记为失败:”。**

  5. 按照小时、分钟和秒的格式设置每个测试的超时值。

  6. 单击**“保存”,然后单击“关闭”**。

    若要使此设置生效,您所编辑的测试设置必须是活动的测试设置。 有关更多信息,请参见如何:从 Microsoft Visual Studio 应用测试设置

使用测试属性设置每个测试的超时值

  1. 打开**“测试列表编辑器”“测试视图”**窗口。

  2. 单击相应的测试并按 F4。

    将打开“属性”窗口,并在其中显示该测试的属性。

  3. 对于**“超时”**属性,按小时、分钟和秒的格式设置值。

    提示

    手动测试的超时值为“无限”。 此值无法更改。

    仅对于此测试而言,您设置的值将重写在测试设置中设置的每个测试的超时值。 测试运行超时值不受影响。

通过单元测试的特性设置每个测试的超时值

  1. 打开单元测试的源代码文件。

  2. 定位测试的 TestMethod 特性。

  3. 添加 Timeout 特性和表示相应超时值的参数。

    超时值以毫秒表示。

    在 Visual C# 中的示例:

    [TestMethod(), Timeout(80)]
    public void MyTestMethod()
    {
    // test code
    }
    

    在 Microsoft Visual Basic 中的示例:

    <TestMethod(), Timeout(80)> _
    Public Sub MyTestMethod()
    ' test code
    End Sub
    

    仅对于此测试而言,您设置的值将重写在测试设置中设置的每个测试的超时值。 测试运行超时值不受影响。

请参见

任务

如何:从 Microsoft Visual Studio 应用测试设置