建議你在這裡新增問題 (和答案)!
問:如何定義新的單元測試?
答:使用適用語言的結構,例如 C++ 的 GTest。您可以定義新的 ,例如:
(在 BUILD.gn 檔案內)
executable("unittests") {
output_name = "scenic_unittests"
testonly = true
sources = ["some_test.cc"],
deps = [":some_dep"],
}
問:如何確保運作順利?
答:測試會以 FUCHSIA_BUILD_DIR/tests.json
檔案中的項目表示
這是根據 fx set
的引數所產生。建立或更新的步驟
tests.json
稱為建構的生成式階段,
fx set
、fx build
或由 fx gen
明確指定。
如果 fx test
找不到測試,請先查看 FUCHSIA_BUILD_DIR/tests.json
。
在大多數情況下,產品設定加上您的 --with
引數
缺少 fx set
指令,或間接執行的狀態測試
嘗試執行如果是這種情況,只要新增測試用的 GN 標籤或 GN
該標籤會間接將測試做為 fx set
的 --with
引數
例如:
fx set ... --with //src/sys:tests
此外,您也可能會為特定產品或變化版本設定停用測試功能。如果
使用 fx set
新增標籤後,fx test
找不到測試。請進行驗證
,建構規則不會將測試排除。舉例來說
不在涵蓋範圍變化版本中。這可能如下所示:
BUILD.gn 檔案:
group("tests") {
if (!is_coverage) {
deps = [ ":my-test" ]
}
}
如果新增的測試位於 fx set
定義的產品設定中,但
仍未顯示在 tests.json
中,您可能需要執行 fx gen
或 fx build
更新 tests.json
,讓 fx test
知道如何執行。
問:如何在 QEMU 執行個體上執行這個單元測試?
如果您的 QEMU 有網路,連結起來也很簡單 但實際上並非如此
A (使用網路):在一個終端機中,使用 fx qemu -N
啟動 QEMU 執行個體。
接著在另一個終端機上輸入 fx test escher_tests
。
這個叫用會執行 escher_tests
套件中的所有測試執行檔。
A (沒有網路):啟動 QEMU 執行個體 (fx qemu
),然後手動叫用
run-test-suite
指令。
在 QEMU 殼層中輸入 run-test-suite <test_url>
。
注意!如未連上網路,檔案會載入至 QEMU 執行個體: 啟動。重新建構測試後,您需要關閉並重新啟動 查看重建測試的 QEMU 執行個體。
如要退出 QEMU,請dm shutdown
。
問:如何在開發裝置上執行單元測試?
答:手動叫用 (例如在 QEMU 中),「或」fx test
至執行中的
裝置。
請注意,啟動的裝置可能不會包含二進位檔,但 fx
test
會建構測試二進位檔,提供給裝置並執行。
,同時將輸出內容傳遞回工作站終端機。輕快!
確認裝置正在執行 (按下 Ctrl-D 鍵即可啟動現有映像檔),並 可連線至工作站
在工作站中,fx test escher_tests
會依序執行所有
測試執行檔。escher_tests
如果只要執行一個測試執行檔,請使用下列指令:
fx test <executable-name>
您可以針對每個來源檔案自動重新建構、安裝及執行測試
fx -i
變更。例如:fx -i test escher_tests
。
問:測試結果會在哪裡擷取?
答:系統會將輸出內容導向至終端機。
有一項方法可將測試輸出內容寫入檔案,包括摘要 JSON 檔案),CQ 漫遊器則是如何收集用於自動化執行的測試輸出內容。
問:如何停用測試?如何尋找並執行停用的測試?
答:方法有幾種。執行上述任一操作時,請務必 回報錯誤,並在程式碼註解中參照該錯誤,該錯誤會停用 測試。
將測試標記為不穩定
方法是在網址末端對應至 tags
欄位的
測試環境。這個做法可以
整個測試目標 (對應至執行檔)。以避免這個目標發生
於修訂佇列中的建構工具執行,並在特殊當機時啟用目標
持續在 CI 中執行測試的建構工具。請務必記下
BUILD.gn 的註解。
變更範例。
如果只想停用較大測試目標中的部分測試, 必須將目標分成兩個 GN 目標,並將一個目標標記為「不穩定的」。
僅限 C++ googletest:在名稱前面加上 DISABLED
如要停用大型測試執行檔中的特定測試,
就可以標示為已停用停用測試的依據是名稱
前置字串為 DISABLED_
。因此,其中一種找出方法就是 git grep
DISABLED_
。
如要強制執行已停用的測試:fx test escher_tests --also-run-disabled-tests
。
僅限 Rust:套用 #[ignore]
屬性
如要停用大型 Rust 測試執行檔中的特定測試,您可以
並加上 #[ignore]
標記。應在 #[test]
屬性下方套用。
範例:
#[test]
#[ignore] // TODO(https://fxbug.dev/NNNNN) re-enable this test when de-flaked
fn flaky_test_we_need_to_fix() { ... }
已停用標示為測試
或者,您也可以在
,內含多個測試執行檔方法是將 BUILD.gn
修改為
如下所示:tests = [ { name = "scenic_unittests", disabled = true } ]
。身為
「scenic_unittests
」結果會放在以下目錄的 disabled
子目錄中:
/pkgfs/packages/<package_name>/0/test
,而且不會由 CQ 系統執行。
對測試發表留言
如要停用大型測試執行檔中的特定測試,您可以 。
問:如何自動執行多組測試?如何確保所有依附元件都經過測試?
答:fx test
的主要功能是批次執行。詳情請見
執行 Fuchsia 測試,參考相關範例,瞭解如何執行多個
一次測試或測試套件
此外,您隨時可以將修補程式上傳至 Gerrit 並執行 CQ 模擬測試。
問:如何在 CQ 模擬測試中執行這個單元測試?
答:按一下 CQ 模擬測試 (又稱 +1),則會將變更定義的單位 並在多個機器人上進行測試,每個建構目標各一個 (x86-64 和 arm64、release 與 debug)。每項工作的輸出頁面都會顯示 所有執行過的測試
問:如何在單元測試中使用一些建構時間構件?
答:最簡單的成果只是來源目錄中的檔案。適用對象
只需要在套件定義的 resources
屬性中加入該屬性即可
單元測試例如,您在
BUILD.gn
:
rustc_binary("my-great-app") {
with_unit_tests = true
...
}
test_package("my-great-app-tests") {
deps = [
":my-great-app_test",
]
resources = [
{
path = "source.zip"
dest = "testing.zip"
}
]
這個檔案會在環境中以 /pkg/data/testing.zip
的形式提供
測試二進位檔。
任務:如要取得在建構程序中產生的構件,
您應該將產生構件的規則新增至 data_deps
test_package
規則陣列。但我還沒試過。更新這項設定
部分嘗試這樣做 :)