【问题标题】:Running unit tests from Atmel Studio 6从 Atmel Studio 6 运行单元测试
【发布时间】:2014-04-06 11:55:00
【问题描述】:

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

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

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

【问题讨论】:

  • 很难自动化这种 IDE:s,因此您最终会在 Atmel Studio 中为每个测试(或测试组)创建一个新项目。
  • @Johan,我希望必须创建一个新项目。我只是不确定如何让该单元测试项目编译为 x86 架构而不是 AVR。我需要创建一个外部 makefile 来做到这一点吗?
  • PC 的测试框架将有一个新的“main”和它自己的构建目标/Makefile。
  • 附带说明一下,关于这个主题的书可以成为 James W. Grenning pragprog.com/book/jgade/test-driven-development-for-embedded-c 的《嵌入式 C 测试驱动开发》的一本很好的书籍

标签: c++ embedded atmel boost-test atmelstudio


【解决方案1】:

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

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

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

祝你好运!

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 关于解析文件进行测试的有趣想法。我不确定这对我正在做的事情是否可行,但我会进一步调查。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2020-07-23
    • 2014-11-16
    • 2016-11-18
    • 2019-01-28
    • 2017-11-03
    相关资源
    最近更新 更多