KUnit - Linux 核心單元測試

本節詳細介紹核心單元測試框架。

簡介

KUnit(核心單元測試框架)為 Linux 核心中的單元測試提供了一個通用框架。 使用 KUnit,您可以定義稱為測試套件的測試用例組。 這些測試要麼在核心啟動時執行(如果已內建),要麼作為模組載入。 KUnit 會自動標記並報告核心日誌中失敗的測試用例。 測試結果以 KTAP(核心 - 測試協議)格式顯示。 它受到 JUnit、Python 的 unittest.mock 和 GoogleTest/GoogleMock(C++ 單元測試框架)的啟發。

KUnit 測試是核心的一部分,用 C(程式設計)語言編寫,並測試核心實現的各個部分(例如:一個 C 語言函式)。 從呼叫到完成,不包括構建時間,KUnit 可以在不到 10 秒的時間內執行大約 100 個測試。 KUnit 可以測試任何核心元件,例如:檔案系統、系統呼叫、記憶體管理、裝置驅動程式等。

KUnit 遵循白盒測試方法。 該測試可以訪問內部系統功能。 KUnit 在核心空間中執行,並且不限於暴露給使用者空間的內容。

此外,KUnit 還有一個 kunit_tool 指令碼(tools/testing/kunit/kunit.py),它可以配置 Linux 核心,在 QEMU 或 UML(使用者模式 Linux)下執行 KUnit 測試,解析測試結果,並以使用者友好的方式顯示它們。

特點

  • 提供用於編寫單元測試的框架。

  • 在任何核心架構上執行測試。

  • 在幾毫秒內執行測試。

先決條件

  • 任何與 Linux 核心相容的硬體。

  • 對於被測核心,Linux 核心版本 5.5 或更高版本。

單元測試

單元測試會隔離地測試單個程式碼單元。 單元測試是測試的最精細粒度,允許測試被測程式碼中的所有可能的程式碼路徑。 如果被測程式碼很小並且沒有任何測試控制之外的外部依賴項(如硬體),則這是可能的。

編寫單元測試

要編寫好的單元測試,有一個簡單而強大的模式:Arrange-Act-Assert(安排-執行-斷言)。 這是一種構建測試用例的好方法,並定義了操作順序。

  • 安排輸入和目標:在測試開始時,安排允許函式工作的資料。 示例:初始化語句或物件。

  • 對目標行為執行操作:呼叫您的函式/被測程式碼。

  • 斷言預期結果:驗證結果(或最終狀態)是否符合預期。

單元測試優勢

  • 從長遠來看,提高測試速度和開發速度。

  • 在初始階段檢測到錯誤,因此與驗收測試相比,降低了錯誤修復成本。

  • 提高程式碼質量。

  • 鼓勵編寫可測試的程式碼。

另請閱讀 單元測試與其他型別的測試有什麼區別?

如何使用它?

您可以在 入門 中找到編寫和執行 KUnit 測試的逐步指南。

或者,您可以隨意瀏覽 KUnit 文件的其餘部分,或者試驗 tools/testing/kunit/kunit.py 和 lib/kunit/kunit-example-test.c 下的示例測試

測試愉快!