Flutter - 如何通过 Android 插件本机代码运行单元测试

Dan*_*ico 7 unit-testing flutter flutter-test flutter-plugin

我们正在为 flutter 构建一个插件, iterable.com 这里la-haus/iterable-flutter,我们想要测试我们插件的 android 实现,我们已经能够为 flutter 端运行测试,但不能运行每个本机实现测试。

文件夹和测试

所以我们有:

  • lib/:库实现,客户端使用的接口。
    • tests/:测试库的 flutter 端
  • android/

我们尝试过什么

问题

如何运行Android 实现 android/src/test测试?

我们当前的问题是https://github.com/la-haus/iterable-flutter/issues/22

小智 2

我们问了同样的问题,但很惊讶没有找到任何使用 flutter 运行本机测试的示例 - 如https://github.com/flutter/flutter/wiki/Plugin-Tests中所述(感谢您提供链接) 。

使用 gradle 的解决方案(不使用 flutter_plugin_tools)

假设:插件结构由flutter create --template=plugin --platforms=android ...命令搭建起来。

要运行本机测试,请确保正确创建本地 gradle 属性文件./example/android/local.properties和。这可以通过在插件的根目录下运行或./android/local.properties来实现。flutter pub getflutter test

然后您就可以运行了gradle --project-dir ./example/android test,它将执行插件示例中所有子项目的测试目标(其中包括有效的插件代码)

下面是一个用于测试插件(名称:)的(稍微精简的)github actions 工作流程示例plgn1

name: CI/CD, test code

on: [push]

jobs:
  plgn1-plugin:
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./app/3rdparty/plgn1

    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-java@v2
        with:
          java-version: "11"
          distribution: "adopt"
          cache: 'gradle'
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: "3.0.1"
          channel: "stable"
      - name: Config flutter
        run: flutter config --no-analytics

      - name: "Run flutter pub get"
        run: flutter pub get

      - name: "Run Flutter test(s)"
        run: flutter test 

      - name: "Run Flutter test(s) for plugin example"
        run: flutter test 
        working-directory: ./app/3rdparty/plgn1/example

      - name: "Run Android test(s) for plugin example"
        run: gradle --project-dir ./example/android --no-daemon test
Run Code Online (Sandbox Code Playgroud)

跳过 flutter_plugin_tools (意见,自己的经验)

插件测试的描述方式native-tests听起来非常简单可行,但玩了 1 个小时后我失去了耐心(我最终感觉它不是为像我们这样的 flutter 插件设计的)。

我最终跳过flutter_plugin_tools并直接继续gradle。这可能不是它在 flutter 生态系统中运行的方式,但它对我们有用。

当您找到一种更简单或更优雅的方式来运行 flutter 插件的本机测试时,请告诉我!