我有一种情况,我需要为嵌入式硬件的一些设备驱动程序编写一些单元测试。代码很旧而且很大,不幸的是没有很多测试。目前,唯一可能的测试是完全编译操作系统,将其加载到设备上,在现实生活场景中使用它并说“它可以工作”。没有办法测试单个组件。
我在这里遇到了一个不错的线程,它讨论了嵌入式设备的单元测试,我从中获得了很多信息。我想更具体一点,并询问是否有人在这种情况下测试设备驱动程序有任何“最佳实践”。我不希望能够模拟相关板正在与之交谈的任何设备,因此可能必须在实际硬件本身上对其进行测试。
通过这样做,我希望能够获得驱动程序的单元测试覆盖率数据,并哄骗开发人员编写测试以增加驱动程序的覆盖率。
我想到的一件事是编写在操作系统上运行的嵌入式应用程序并运行驱动程序代码,然后将结果传达回测试工具。该设备有几个接口,我可以使用它们来驱动我的测试 PC 上的应用程序,以便我可以练习代码。
任何其他建议或见解将不胜感激。
更新:虽然它可能不是准确的术语,但当我说单元测试时,我的意思是能够测试/执行代码而无需编译整个 OS+驱动程序并将其加载到设备上。如果我必须这样做,我会称之为集成/系统测试。
问题是我们拥有的硬件是有限的,开发人员经常在修复错误等时使用它们。保持一个专用并连接到完成 CI 服务器和自动化测试的机器可能是不可以的这个阶段。这就是为什么我正在寻找方法来测试驱动程序,而不必实际构建整个东西并将其上传到设备上。
概括
基于以下出色的答案,我认为解决该问题的合理方法是使用 IOCTL 公开驱动程序功能,然后在嵌入式设备的应用程序空间中编写测试以实际运行驱动程序代码。
将一个小程序驻留在设备上的应用程序空间中也很有意义,该程序公开了一个 API,该 API 可以通过串行或 USB 运行驱动程序,以便可以在 PC 上编写单元测试的内容,该 PC 将与硬件并运行测试。
如果项目刚刚开始,我认为我们可以更好地控制组件的隔离方式,以便主要在 PC 级别进行测试。鉴于编码已经完成并且我们正在尝试将测试工具和案例改进到系统上,我认为上述方法更实用。
谢谢大家的回答。