繁体   English   中英

Dart/Flutter 测试是同步执行还是异步执行

[英]Are Dart/Flutter tests executed synchronously or asynchronously

有人可以解释一下如何使用测试运行器执行 Flutter/Dart 测试吗?

测试是同步执行还是异步执行?

测试框架是否同步执行每个测试,这意味着在任何时候都只执行一个测试和测试套件?

还是测试框架在一个测试套件中一次只执行一个测试,但能够同时执行多个测试套件?

或者测试框架完全异步地同时运行所有测试和测试套件,彼此完全独立?

这很重要,因为它直接影响我们是否能够构建测试的方式,尤其是在测试的设置和拆除以及我们断言功能正常工作的方式时。

谢谢!

通常, dart test会并行执行许多测试(并行度根据 CPU 内核数而变化),但您可以使用命令行标志禁用它。

你不应该编写任何相互依赖的测试(即一个测试不应该依赖另一个测试设置的一些全局状态)。 例如,您可能会发现,由于您的笔记本电脑与 CI 服务器的 CPU 配置不同,您的测试可能会在本地通过,但由于顺序不同而在 CI 中失败。

如果您有一些非常昂贵的设置逻辑,并且需要在多个测试之间重用,您可以使用setUpAll()在测试组中的每个测试之前运行一些代码,但仍然不鼓励这样做。 就个人而言,我更喜欢将测试合并为一个长测试,以保持所有测试独立。

这有一些优点。 例如,您可以使用--total-shards--shard-index在 CI 中并行化测试(通过创建多个作业,每个作业运行测试套件的不同子集)。

您还可以使用--test-randomize-ordering-seed您的测试--test-randomize-ordering-seed ,以确保您不会意外地在可能使结果无效的测试之间设置此类依赖关系(即,也许test2只有在test1之后发生时才通过) ,随机排序会发现这一点)。

TLDR

许多测试并行运行。 尽量保持测试独立,不依赖于测试的顺序。 将设置逻辑提取到函数中并将其传递给setUp 如果你真的需要的性能,您可以尝试setUpAll但如果可能避免。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM