如何创建一个共享目录以在集成测试和小部件测试之间共享代码?

Posted

技术标签:

【中文标题】如何创建一个共享目录以在集成测试和小部件测试之间共享代码?【英文标题】:How do I make a shared directory to share code in flutter between integration tests and widget tests? 【发布时间】:2021-06-23 18:05:41 【问题描述】:

如何在 Flutter 中的集成测试和 Widget 测试之间创建共享代码目录?可能会有很多,因为他们现在使用与新官方相同的 API

android 本机中,您可以执行以下操作,以便在本地非仪器化 UI 测试(引擎盖下的 Roboelectric)和使用 Espresso API 仪器化的 Espresso 测试之间共享代码。当然还有各种各样的共享助手、模拟,等等。

我如何在 Flutter 中实现类似的目标?

 // This allows us to share classes between androidTest & test directories.
    android.sourceSets 
        test 
            java.srcDirs += "$projectDir/src/testShared"
        
        androidTest 
            java.srcDirs += "$projectDir/src/testShared"
        
    

【问题讨论】:

【参考方案1】:

这可以使用共享包(即test_base)来实现。

    为您的测试代码创建一个包(避免混淆:您的代码将写入其 lib 文件夹中)。

运行:

flutter create --template=package test_base
    将您的主包作为依赖项添加到test_base,以便您可以访问主包代码。

test_base/pubspec.yaml

dependencies:
  <your-package-name>:
    path: ../
    test_base 作为开发依赖项添加到您的主库中。

./pubspec.yaml

dev_dependencies:
  test_base:
    path: test_base/

现在您可以在 widget/integration 测试中导入 test_base 包。

注意: 这样在test_base 中,您可以导入transitive dependencies 的包(主包的依赖项)而不会出现编译错误。但不鼓励在 dart 中显式导入您未在 test_base/pubspec.yaml 中明确定义的依赖包,并且可能会在 dart 的未来版本中面临 linter 或编译警告(目前是 2.13.4 并且没有警告)。这意味着您需要在test_base/pubspec.yaml 中明确定义这些依赖项。虽然我认为是这种情况,但导入传递依赖包是无害的。

【讨论】:

以上是关于如何创建一个共享目录以在集成测试和小部件测试之间共享代码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在活动和小部件之间共享数据和方法

Ocunit - 创建单例测试类以在类之间共享代码

活动/服务和小部件提供者之间的通信?

在 iOS 14 中的主应用程序和小部件之间共享 UserDefaults

如何在 Flutter 集成测试中最好地存根/模拟 rest API 调用

如何共享 DynamoDB 表以在组织的其他成员之间保持透明?