概述

#

如果您編寫了針對 Flutter 引擎的 Java 單元測試(例如 Robolectric 測試)並且使用了 FlutterMain.setIsRunningInRobolectricTest(true) API,請將其替換為以下內容:

java
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 進一步重構了 FlutterLoaderFlutterJNI,以便進行額外的模擬和測試。

以便進行額外的模擬/測試。

遷移指南

#

遷移前的程式碼

java
FlutterMain.setIsRunningInRobolectricTest(true);

遷移後的程式碼

java
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