FlutterMain.setIsRunningInRobolectricTest on Android 已移除
概述
#如果您编写了针对 Flutter 引擎的 Java 单元测试(例如 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