我可以为基于AC的MCU项目使用什么单元测试框架?


15

我在考虑如何在我的mcu项目中使用单元测试,以及可以用来简化它的框架。

今天,我在Linux pc上使用带有OpenOCD-jtag的stm32,该文件全部由经典的Makefile控制并与gcc交叉编译。

我可以自己创建一些东西,但是如果有一个我可以使用的框架,那就太好了。(如果框架可以以Jenkins / Hudson可以读取的格式输出结果,那么这是一个好处。)

有没有办法使用带有stm32的单元测试框架?


3
我没有时间写一个完整的答案,但是我已经使用了在这些论文本博客系列中找到的许多工具和技术。一句话:CMock!
凯文·维米尔

Answers:


4

查看CppUTest,以及James Grenning出色的http://pragprog.com/book/jgade/test-driven-development-for-embedded-c

CppUTest支持C和C ++,并且提供了一套不错的Makefile模板,这些模板可以让我快速入门。


买了一个ePub版本,让我们看看它是否有好处:)
Johan

这本书很好,但是我认为团结(书中的其他框架)将更好地满足我的需求。
约翰

因为这本书将我推向正确的方向,所以被接受了。
约翰

5

有很多变量将决定您所用的最佳单元测试框架。可能会影响您选择的一些项目是:

  • 目标语言。
  • 提供哪些库支持。例如libc或其简化版本。
  • 目标的操作系统。例如:无,FreeRTOS,自定义。

大多数xUnit类型框架将提供一些基本级别的功能,这些功能可能会很有用。我过去使用Cunit取得了一些成功。(Ubuntu / Debian上的libcunit1-dev软件包)。大多数框架将需要libc可用,某些框架需要附加的OS支持。

只有3行长的另一种替代方案Minunit

我发现以微控制器为目标的单元测试非常麻烦,因为您需要能够提供一个适合下载测试,运行测试然后返回结果的环境。仅使平台就位,这将使您能够完成此任务。

我采用的另一种对我有用的方法是在主机上进行单元测试,在驱动程序和应用程序代码之间实现抽象层。由于您将gcc用作目标,因此代码也应在主机上编译。

通常,有了主机操作系统及其所有工具的全面支持,在编译主机上进行测试通常要容易得多。例如,在主机上进行测试时,我有一个无线驱动程序的模拟版本,其接口与在目标上运行的真实驱动程序相同。主机版本使用UDP数据包模拟无线数据包传输,而模拟驱动程序支持丢弃数据包的功能,因此我可以测试协议。

在我正在开发的产品中,正在使用线程操作系统,因此用于在主机操作系统上进行测试的抽象层使用了pthread。

虽然不是很完美,但是编写和运行测试越容易,实现更多测试用例的可能性就越大。使代码在不同平台上运行的另一个好处是测试代码是否可移植。如果目标和主机体系结构不同,您将很快发现字节序错误。

我现在谈的有点不对,但是觉得这些想法可能对您选择测试框架和测试方法有所帮助。


我已经解决了如何在目标上获取代码,并且可以在脚本模式下使用gdb在类似test_ok或test_fail(fun-tech.se/stm32/TestSuite/index.php)的不同断点处停止。所以我有点偏。这更是一个问题,如何建立不同的“测试”。我今天的想法有些不灵活,这就是为什么我开始寻找某种框架的原因。
约翰

1

查看embUnit http://embunit.sourceforge.net/embunit/index.html。它是具有低占用空间的嵌入式C单元测试框架。

我们在几个嵌入式微控制器项目中成功使用了它。不要期望桌面单元测试框架提供的选项和功能。但这绝对足够强大。

它为您定义了断言的分配,因此您不必浪费时间编写与minUnit一样的自定义断言。


1

前段时间,我写了一篇有关该主题的详尽教程:使用Ceedling单元测试(嵌入式)C应用程序;我在很多项目中都使用了这些技术,到目前为止我还很高兴。


2
这是仅链接的答案,因此,如果URL更改或链接断开,它将变得毫无价值。您应该在答案中说明相关信息,然后可以添加链接作为参考。
管道

2
@pipe是的,但是问题(本质上是产品推荐)要求这样的答案。
德米特里·格里戈里耶夫


-1

尝试使用lint,但我不认为它适用于单元测试和代码分析。


2
静态代码分析无助于执行和测试代码,因此,它实际上并没有帮助。
约翰

1
也许对单元测试没有帮助,但是每个人都应该使用某种静态分析工具。
蒂姆(Tim)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.