如何在Flutter/Dart中让测试套件内指定测试串行运行?
在Dart/Flutter中让指定测试串行运行
当然可以实现,而且完全满足你在完整测试套件中指定部分测试串行执行的需求,不需要通过CLI单独过滤测试。以下是几种实用方案:
1. 给单个测试标记串行
直接在test函数中添加serial: true参数,标记后的测试会单独串行执行,不会和其他并行测试同时运行,避免单例状态干扰:
test("用户登录集成测试", () async { // 这里编写依赖第三方单例库的测试逻辑 }, serial: true);
2. 给一组相关测试标记串行
如果多个测试都依赖同一个单例资源,可以把它们归到一个group里,给整个组设置serial: true,组内的所有测试会依次串行执行,同时和组外的并行测试互不影响:
group("用户认证流程测试", () { test("登录接口测试", () async { // 测试登录逻辑 }); test("用户信息查询测试", () async { // 测试获取当前用户信息 }); test("登出功能测试", () async { // 测试登出逻辑 }); }, serial: true);
3. 全局串行(备选,不推荐)
如果所有测试都需要串行(不推荐,会降低测试效率),可以在测试入口的main函数中设置全局并行度为1:
void main() { // 将整个测试套件的最大并行数设为1,所有测试串行执行 testSuite.parallelism = 1; test("其他测试1", () {}); test("其他测试2", () {}); }
原理说明
Dart的test包(Flutter测试基于此)默认会将测试分配到不同的Isolate并行执行,而标记serial: true的测试/组会被放到单独的串行队列中执行,不会和并行测试共享Isolate,从根源上避免了单例状态对测试的干扰。
内容的提问来源于stack exchange,提问作者Felix ZY
相关产品推荐
相关产品推荐

