為促進測試重複使用,Fuchsia 測試套件元件應避免直接使用 RealmBuilder。相反地,測試應使用 FIDL 呼叫個別的測試領域工廠元件 (TRF),該元件會建立測試領域並傳回 RealmProxy 連線。RealmProxy 連線可提供對領域公開功能的存取權。
這個模式可讓您更輕鬆地在 CTF 中重複使用測試,因為測試套件和測試領域工廠會透過 FIDL 介面分開,讓不同版本的測試套件可針對相同的測試領域工廠執行,反之亦然。採用這種模式的測試日後也能重複用於不同類型的測試。
快速入門導覽課程
如需其他說明,請參閱下方的範例清單。
測試拓撲
測試應使用 FIDL 呼叫測試領域工廠元件,而非直接使用 RealmBuilder 建立測試領域。領域工廠元件會傳回 RealmProxy FIDL 連線,讓測試套件可用來連線至領域公開的功能。依照慣例,RealmFactory FIDL 通訊協定會接受測試專屬的 RealmOptions
FIDL 表格做為支援設定的引數。
套件結構
測試套件和測試領域工廠必須屬於不同的套件。這可讓您在 CTF 中發布測試套件,而不必同時發布測試領域工廠。在建構期間,子套件會將兩個元件合併為單一套件。
RealmFactory SDK 規定
如果 CTF 測試會使用 RealmFactory FIDL 通訊協定,則應有 FIDL 可用性註解。您也必須將此通訊協定新增至 compat_test
SDK 類別,以表示 API 可供 CTF 測試使用,且必須維持向後相容性,但不向 SDK 使用者或 partner
類別 (如果應向 SDK 使用者提供) 公開。
常見的測試模式
Puppet 元件
木偶是僅供測試的元件,會在測試領域中執行,並將 FIDL 通訊協定公開給測試套件。測試套件會使用 RealmProxy 連線連線至通訊協定,而木偶會遵循測試套件傳送的指令,與領域中的其他元件互動。
木偶可讓測試與測試領域互動,而不會揭露領域的實作詳細資料。舉例來說,您可以使用木偶為元件提供測試輸入資料,或檢查其狀態。
您可以編寫木偶來支援單一測試,也可以將其當做通用元件,在不同測試領域中重複使用。
如需木偶元件的範例,請參閱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 通訊協定無法提供非通訊協定功能的存取權。建議您建立木偶,以便調解對非通訊協定功能的存取權。