手动硬件单元测试
驱动程序可以选择实现 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 库包含一个 helper 类,该类与 zxtest 集成并为您处理日志记录。
集成测试
驱动程序作者应使用 driver_test_realm 进行集成测试。
单元测试
驱动程序作者应使用 mock-ddk 库进行单元测试。
有许多实用的模拟库:
- fake_pdev - 为虚构 pdev 父级创建信息
- mock-mmio-reg 模拟 Mmio 寄存器
- fake-object - 内核对象的虚构用户空间版本
TODO(https://fxbug.dev/42128499):请在此处填写详细信息。