測試領域工廠

為促進測試重複使用,Fuchsia 測試套件元件應避免直接使用 RealmBuilder。相反地,測試應使用 FIDL 呼叫個別的測試領域工廠元件 (TRF),該元件會建立測試領域並傳回 RealmProxy 連線。RealmProxy 連線可提供對領域公開功能的存取權。

這個模式可讓您更輕鬆地在 CTF 中重複使用測試,因為測試套件和測試領域工廠會透過 FIDL 介面分開,讓不同版本的測試套件可針對相同的測試領域工廠執行,反之亦然。採用這種模式的測試日後也能重複用於不同類型的測試

快速入門導覽課程

  • 如要編寫新測試,請執行 testgen 產生測試模板。
  • 如要重構現有測試,請執行 testgen,並將舊測試程式碼複製到產生的測試中。

如需其他說明,請參閱下方的範例清單。

測試拓撲

測試應使用 FIDL 呼叫測試領域工廠元件,而非直接使用 RealmBuilder 建立測試領域。領域工廠元件會傳回 RealmProxy FIDL 連線,讓測試套件可用來連線至領域公開的功能。依照慣例,RealmFactory FIDL 通訊協定會接受測試專屬的 RealmOptions FIDL 表格做為支援設定的引數。

trf_topology.png

套件結構

測試套件和測試領域工廠必須屬於不同的套件。這可讓您在 CTF 中發布測試套件,而不必同時發布測試領域工廠。在建構期間,子套件會將兩個元件合併為單一套件。

trf_ctf_packages.png

RealmFactory SDK 規定

如果 CTF 測試會使用 RealmFactory FIDL 通訊協定,則應有 FIDL 可用性註解。您也必須將此通訊協定新增至 compat_test SDK 類別,以表示 API 可供 CTF 測試使用,且必須維持向後相容性,但不向 SDK 使用者或 partner 類別 (如果應向 SDK 使用者提供) 公開。

常見的測試模式

Puppet 元件

木偶是僅供測試的元件,會在測試領域中執行,並將 FIDL 通訊協定公開給測試套件。測試套件會使用 RealmProxy 連線連線至通訊協定,而木偶會遵循測試套件傳送的指令,與領域中的其他元件互動。

trf_toplogy_with_puppet.png

木偶可讓測試與測試領域互動,而不會揭露領域的實作詳細資料。舉例來說,您可以使用木偶為元件提供測試輸入資料,或檢查其狀態。

您可以編寫木偶來支援單一測試,也可以將其當做通用元件,在不同測試領域中重複使用。

如需木偶元件的範例,請參閱Archivist 測試木偶,該木偶會將記錄和檢查資料傳送至 Archivist,並由這個 FIDL 通訊協定控制。任何測試都可以使用 Archivist 測試木偶,將任意記錄和檢查資料插入測試領域。

插入測試資料

部分測試會為測試中的元件提供輸入資料,例如結構化設定值或從目錄讀取的資料。使用測試領域工廠元件時,至少有兩種方式可為元件提供輸入資料:

  • 使用 RealmOptions FIDL 資料表的某些欄位,將 FIDL 呼叫中的資料傳遞至 RealmFactory/CreateRealm
  • 建立木偶來提供資料。

第一種方法是最簡單的做法,通常在元件開始執行前必須提供測試資料時,就必須使用這種方法,但提供者應小心避免使用這種方法造成漏洞抽象化。舉例來說,如果元件從 /config/data 目錄能力讀取輸入資料,請考慮從測試套件 (做為 VMO) 傳遞資料,並讓測試領域提供這個目錄,而非將句柄傳遞至 fuchsia.io.Directory 能力。

模擬 FIDL 互動

您可以使用 RealmBuilder 定義「本機元件」,以便對 FIDL 通訊協定進行 Stub 處理,或記錄 FIDL 流量。不過,使用 TRF 時,測試套件和測試領域會在不同的程序中執行。建議您改為建立木偶元件,讓測試套件可用來向測試中的元件傳送虛設要求或回應。

範例

以下是一些測試套件和測試領域工廠元件的範例。

測試套件 Realm 工廠元件
WLAN 硬體模擬器測試 WLAN hw-sim 測試領域工廠
診斷偵測測試 診斷偵測測試領域工廠
診斷取樣器測試 診斷取樣器測試領域工廠
pkgdir tests pkgdir test 領域 factory
CTF 範例 Rust 測試 CTF 範例測試領域工廠
CTF 範例 C++ 測試 CTF 範例測試領域工廠
模擬 hwinfo 測試領域工廠

常見問題

何時應將此模式套用至測試?

如果測試使用 RealmBuilder 執行及測試元件,則應改為在測試領域工廠元件中包裝所有 RealmBuilder 程式碼。即使您不打算在 CTF 中執行測試,也必須採用這個模式,才能充分利用 Fuchsia 團隊未來的計畫,讓測試在不同情境中更容易重複使用,例如效能測試、系統 (非密封) 測試和端對端測試。

如何模擬、假造或模擬元件的 FIDL 通訊協定?

請參閱本節的模擬 FIDL 互動動作相關說明。

已知問題

我的測試無法存取領域中的非通訊協定功能

RealmProxy 通訊協定無法提供非通訊協定功能的存取權。建議您建立木偶,以便調解對非通訊協定功能的存取權。