Version: 6000.3
语言: 中文
9. 使用 UnityTest 属性
11. 基于场景的测试

10. 长时间运行的测试

学习目标

本练习将介绍运行时间较长的测试的最佳做法和陷阱,例如返回WaitForSeconds.

介绍和动机

在播放模式下,UnityTests 可以返回 Yield 指令,例如WaitForSeconds.支持这样做,因为在某些测试用例中,等待有限的时间可能是有效的。但是,长时间运行的测试通常是一种不良做法,应尽可能避免。如果无法避免长时间运行的测试,建议向测试提供[Category][Explicit]属性。这[Category]属性用于使用类别名称标记测试,该类别名称稍后可用作筛选器,以有选择地运行测试子集。这[Explicit]属性确保在运行所有测试时默认情况下不运行测试。仅当在 UI 中显式选择测试或选择其类别时,才会运行测试。

[UnityTest]
[Explicit, Category("integration")]
public IEnumerator MySlowTest()
{
...
}

在实践中,这意味着如果您为一些长时间运行的测试提供“集成”类别,则只有在选择“集成”类别时才会运行它们。这使得即使在大型项目上也能保持“所有测试”运行得相对较快。也可以指定[Explicit][Category]属性,然后应用于类中的所有测试,以及程序集级别的属性,该属性应用于该程序集中的所有测试。将其应用于程序集的示例:

[assembly:Explicit]
[assembly:Category("integration")]

最好在AssemblyInfo.cs文件。

锻炼

导入示例 10_LongRunningTests,它与播放模式的测试程序集一起设置。

练习是添加一个新的UnityTest,它会返回一个WaitForSeconds命令,然后用[Category][Explicit]标签。

RunAll 时,应跳过测试。在 UI 的类别下拉列表中选择“类别”时,选择“RunAll”时不应跳过测试。

溶液

示例10_LongRunningTests_Solution包含解决方案。

实现的测试可以如下所示:

[UnityTest]
[Explicit, Category("integration")]
public IEnumerator ASlowTest()
{
 yield return new WaitForSeconds(5);
}

其他资源

9. 使用 UnityTest 属性
11. 基于场景的测试