8

我目前正在 Atmel Studio 6 中开发一个嵌入式 c++ 项目。该项目具有相当重要的嵌入式部分和重要的业务逻辑部分。理想情况下,我想为业务逻辑代码运行一些单元测试。能够方便地构建然后运行这些测试将更有可能使用单元测试。

如果我尝试使用默认的 avr-gcc 编译器使用 Boost 单元测试进行编译,则会出现错误,因为找不到各种头文件。我知道这些头文件不是为我使用的 AVR 芯片组实现的,因为在那种情况下它们太贵了。但是,这些标头仅用于对非嵌入式部分进行单元测试,因此已放置在它们自己的专用单元测试项目中。

我是否需要设置不同的编译器来编译单元测试?是否可以使用与安装的默认 avr-gcc 不同的编译器工具链来编译单元测试,还是我必须在其他地方编译单元测试?有没有更简单的方法来做到这一点?

4

2 回答 2

5

当我构建嵌入式软件时,我有时会在(与硬件无关的)业务逻辑上编写单元测试,并在我的主机 x86 架构上运行它们。

我通常在同一源代码树上构建一个Eclipse CDT(或Qt Creator )项目,访问您拥有 C++ 逻辑的文件夹,并将其与单元测试框架和带有gcc的测试用例一起编译,针对 x86 架构。EclipseQt Creator将为我处理 Makefile。您可以在这里使用Boost或任何其他单元测试框架;我通常只需要我自己提供的 50 行代码,以及一些断言函数(例如,这样你就可以在最终的 AVR 架构中使用相同的单元测试)。

我通常提供ant任务来构建 AVR 的嵌入式软件,以及构建和通过 x86 的单元测试,因此我可以轻松地将它与持续集成面板集成。

祝你好运!。

于 2014-03-07T15:02:51.307 回答
3

在跨平台项目中,拥有一组以上的工具链是很常见的。在其中一个平台上构建时出现问题意味着代码尚未在其中一个平台上正确移植(我相信您已经知道这部分)。

您通常做的是添加编译时开关并重写有问题的代码。例如,任何对 boost 库的引用(在 Win 的代码上)都会导致嵌入式目标出现问题。因此,您必须使用编译时间、机器相关、开关来删除它们。因此,您可能不得不重写一些模块,但这就是为什么您不使用尚未在跨平台代码中移植到所需架构(如 boost)的库的第 3 方库。

由于我们在这里讨论单元测试,因此您可以在平台上运行时简单地将一些输出打印到文件中,而不是让基于 Windows 的脚本/程序解析它们并解释结果 - 这种策略适用于 90%在嵌入式平台上进行单元测试(它还解决了大多数嵌入式项目附带的实时问题)。

于 2014-03-12T08:53:48.933 回答