如何在 Dart/Flutter 上的测试中导入测试实用程序文件

Posted

技术标签:

【中文标题】如何在 Dart/Flutter 上的测试中导入测试实用程序文件【英文标题】:How to import test util files inside of your tests on Dart/Flutter 【发布时间】:2021-01-16 14:22:02 【问题描述】:

我有一些单元测试和一些仅与测试相关的类,例如我的模型的工厂、mockito 上的一些扩展等等......

问题是当我尝试从我的测试中导入这些文件时,我可以使用相对路径导入它们,假设我有这个实用程序:

test/src/test_utils/factories.dart test/src/test_utils/mocks.dart test/src/test_utils/mockito_extensions.dart

我怎么做不到

但是当我尝试从我的测试中导入它们时,找不到它们

import 'package:myapp/test_utils/mocks.dart';

或:

import 'package:myapp/src/test_utils/mocks.dart';

唯一有效的

导入它们的唯一方法是通过相对路径,例如:

import '../../test_utils/mocks.dart';

问题

我很想了解这里发生了什么,为什么我的测试在导入时找不到测试 utils 类,以及执行此操作的最佳方法是什么。

【问题讨论】:

这目前不起作用。我不能用点离开 lib/ 目录。基本上,../../test 变成了 lib/test 【参考方案1】:

在 pub 包布局中,package: URI 格式用于lib/ 下的文件。这些是可以从包外部使用的“公共库”,因此它们是与包名称相关联的库。 test/ 下的文件是包私有的,不需要通过包名称引用 - 它们只能 从相邻文件和目录中引用,因此相对导入就足够了。 package: URI 格式的设计主要是因为它允许导入到没有稳定相对路径的其他包。

见https://dart.dev/tools/pub/package-layout#public-libraries

推荐使用相对导入。

【讨论】:

以上是关于如何在 Dart/Flutter 上的测试中导入测试实用程序文件的主要内容,如果未能解决你的问题,请参考以下文章

Dart / Flutter测试肘,比较预期和实际的问题

Dart/flutter 小部件测试,无论是按键还是文本都找不到文本小部件

flutter - 如何在 dart/flutter 中收听流值

flutter - 如何在Dart/Flutter中将某些元素从一个Map复制到新Map中?

如何在 Dart/flutter 中将视频文件分割成小块?

如何在 dart/flutter 中声明 64bit unsigned int?