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