驱动程序测试

手动硬件单元测试

驱动程序可以选择实现 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 库进行单元测试。

有许多实用的模拟库:

TODO(https://fxbug.dev/42128499):在此处填写更多详细信息。