Android 中移除 FlutterMain.setIsRunningInRobolectricTest
摘要
#如果您针对 Flutter 引擎的 Java 嵌入编写 Java JUnit 测试(例如 Robolectric 测试),并使用了 FlutterMain.setIsRunningInRobolectricTest(true) API,请将其替换为以下内容:
FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
FlutterInjector.setInstance(
new FlutterInjector.Builder()
.setFlutterLoader(new FlutterLoader(mockFlutterJNI))
.build());这种情况应该非常少见。
背景
#FlutterMain 类本身已被弃用,并被 FlutterInjector 类取代。FlutterMain 类使用许多静态变量和函数,这使得测试变得困难。FlutterMain.setIsRunningInRobolectricTest() 是一种临时的静态机制,允许测试在 JVM 上的主机机器上运行,而无需加载 libflutter.so 本机库(这无法在主机机器上完成)。
现在,Flutter 的 Android/Java 引擎嵌入中测试所需的所有依赖注入都已移至 FlutterInjector 类,而不是使用一次性解决方案。
在 FlutterInjector 类中,setFlutterLoader() Builder 函数允许控制 FlutterLoader 类如何定位和加载 libflutter.so 库。
变更说明
#此 引擎提交 删除了 FlutterMain.setIsRunningInRobolectricTest() 测试函数; 此 提交 添加了 FlutterInjector 类来辅助测试。 PR 20473 进一步重构了 FlutterLoader 和 FlutterJNI 以允许进行额外的模拟和测试。
以允许进行额外的模拟/测试。
迁移指南
#迁移前的代码:
FlutterMain.setIsRunningInRobolectricTest(true);迁移后的代码:
FlutterJNI mockFlutterJNI = mock(FlutterJNI.class);
FlutterInjector.setInstance(
new FlutterInjector.Builder()
.setFlutterLoader(new FlutterLoader(mockFlutterJNI))
.build());时间线
#包含的版本:1.22.0-2.0.pre.133
稳定版本:2.0.0
除非另有说明,否则本网站上的文档反映的是 Flutter 的最新稳定版本。页面最后更新于 2025-01-30。 查看源代码 或 报告问题。