手动硬件单元测试
驱动程序可以选择实现 run_unit_tests()
驱动程序操作,该操作会为驱动程序提供一个钩子,以便在系统初始化时运行有权访问父设备的单元测试。这意味着驱动程序可以测试其绑定和解除绑定钩子,以及与真实硬件的任何交互。如果测试通过(驱动程序从钩子返回 true
),操作将照常继续,并且 bind()
将执行。如果测试失败,设备管理器会假定驱动程序无效,并且永远不会尝试绑定它。
由于这些测试必须在系统初始化时运行(以免干扰驱动程序的正常运行),因此需要使用内核命令行标志激活它们。如需为特定驱动程序启用钩子,请使用 driver.<name>.tests.enable
。或者,对于所有驱动程序:driver.tests.enable
。如果驱动程序未实现 run_unit_tests()
,则这些标志将无效。
run_unit_tests()
会将一个通道传递给驱动程序,以便其将测试输出写入到该通道。测试输出应采用 fuchsia.driver.test.Logger
FIDL 消息的形式。driver-unit-test 库包含一个辅助类,该类可与 zxtest 集成并为您处理日志记录。
集成测试
驱动程序作者应使用 driver_test_realm 进行集成测试。
单元测试
驱动程序作者应使用 mock-ddk 库进行单元测试。
有许多实用的模拟库:
- fake-pdev - 为虚构的 pdev 父级创建信息
- mock-mmio-reg 模拟 Mmio 寄存器
- fake-object - 内核对象的虚假用户空间版本
TODO(https://fxbug.dev/42128499):在此处填写更多详细信息。