在你的嵌入式软件里面如何进行单元测试?如何解决硬件依赖的问题?
这其中的秘密就是mock。
我们可以mock我们的硬件接口,那样我们就可以不需要依赖硬件进行测试。这将允许我们在硬件还没有准备好之前就可以进行测试。
计划
如果我们开发一个嵌入式MCU软件,我们通常会使用MCU相关的外设,像SPI,I2C,TIMER等。
对于每一个硬件接口,我们需要一个对应的软件驱动模块,这部分模块会依赖于对应的硬件(比如:进行硬件寄存器访问)
我们可以mock这些硬件接口,消除这些硬件依赖,并允许我们对应用部分进行单元测试。对应的,我们可以使用宿主PC来编译我们的软件,而不是使用对应的MCU的编译工具来对程序进行编译。
为了帮助我们创建这些mocks,我们可以使用mocking框架来实现。这个工具目前可以包含在ceedling里面,名为CMock。其允许你从对应程序的头文件里面创建各个软件模块的mocks。Ceedling可以提升使用CMock生成mocks的体验,非常的简便快捷。
测试示例
假设我们已经创建了一个Ceedling的工程。假想我们目前需要与一个外部的温度传感器进行通信。