内核测试指南¶

KUnit 与 kselftest 的区别¶

KUnit (KUnit - Linux 内核单元测试) 是一个完全在内核内的系统,用于“白盒”测试:由于测试代码是内核的一部分,它可以访问不向用户空间公开的内部结构和函数。

因此,KUnit 测试最适合针对内核中小的、自包含的部分编写,这些部分可以独立测试。这与“单元”测试的概念非常吻合。

例如,KUnit 测试可能会测试单个内核函数(甚至是一个函数中的单个代码路径,如错误处理情况),而不是整个功能。

这也使得 KUnit 测试构建和运行速度非常快,允许它们作为开发过程的一部分频繁运行。

有一份 KUnit 测试风格指南,可能在 测试风格和命名法 中提供进一步的提示。

另一方面,kselftest (Linux 内核自测) 大部分在用户空间中实现,测试是普通的用户空间脚本或程序。

这使得编写更复杂的测试,或者需要更多地操作整个系统状态(例如,生成进程等)的测试变得更容易。然而,无法直接从 kselftest 调用内核函数。这意味着只有通过某种方式(例如通过系统调用、设备、文件系统等)暴露给用户空间的内核功能才能通过 kselftest 进行测试。为了解决这个问题,一些测试包含一个伴随的内核模块,该模块暴露更多信息或功能。但是,如果测试主要或完全在内核内部运行,KUnit 可能是更合适的工具。

因此,kselftest 非常适合对整个功能的测试,因为这些功能会向用户空间公开一个接口,可以对其进行测试,但不会暴露实现细节。这与“系统”或“端到端”测试非常吻合。

例如,所有新的系统调用都应该附带 kselftest 测试。

友情链接