Skip to content
 编辑

KUnit - Linux Kernel Unit Testing

\n

KUnit - Linux 内核单元测试

::: {.toctree maxdepth=“2” caption=“Contents:”} start architecture run_wrapper run_manual usage api/index style faq running_tips :::

本节详细介绍内核单元测试框架。

介绍

KUnit(内核单元测试框架)为 Linux 内核里的单元测试提供了一个通用框架。使用 KUnit,你可以定义称为测试套件的测试用例组。 这些测试要么在构建为内置组件后默认启动要么作为一个模块加载,KUint 会在内核日志中自动标记并报告失败的测试用例。 这些测试结果在 KTAP (Kernel - Test Anything Protocol) format</dev-tools/ktap>{.interpreted-text role=“doc”} 中。 它受 JUnit 、Python 的 unittest.mock 和 GoogleTest/GoogleMock (C++ 单元测试框架) 启发。

KUnit 测试用 C 语言编写,是内核的一部分,测试内核实现的部分内容(例如:一个 C 语言函数)。 除过构建时间,从调用到完成,KUnit 可以在 10 秒内运行大约 100 个测试。 KUnit 可以测试任何内核组件,比如文件系统、系统调用、内存管理、设备驱动程序等等。

KUnit 采用白盒测试方法,该测试可访问内部系统功能。 KUnit 在内核中运行并且不限于暴露给用户空间的事物。

同时 KUnit 有 kunit 工具,一个配置 Linux 内核的脚本(tools/testing/kunit/kunit.py),运行 QEMU 或 UML 下的 KUnit 测试(User Mode Linux </virt/uml/user_mode_linux_howto_v2>{.interpreted-text role=“doc”}),解析测试结果,并以用户友好的方式展示它们。

特点

准备

单元测试

单元测试是对孤立的单个代码单元进行测试。 一个单元测试是测试的最精细粒度,并允许在被测代码中测试所有可能的代码路径。 如果被测代码规模较小,且不存在任何不受测试控制的外部依赖(如硬件),那么这有可能实现。

编写单元测试

为了编写好的单元测试,有一个简单但强大的模式:Arrange-Act-Assert。 这是一个构建测试用例并且定义运算顺序的好方法。

单元测试优势

其他请阅读 kinds-of-tests{.interpreted-text role=“ref”}.

使用方法

你可以在 Documentation/dev-tools/kunit/start.rst 中找到一份关于编写和运行 KUnit 测试的分布指南。 或者自由浏览 KUnit 的其他文档,亦或尝试使用 tools/testing/kunit/kunit.py 以及 lib/kunit/kunit-example-test.c 下的例子。

测试顺利!