如何使用外部单元测试来布局arduino代码文件

时间:2016-01-21 07:37:12

标签: arduino avr googletest

我有一个arduino项目的三个代码文件:

main.ino  <-- main sketch
helper.cpp  <-- helper functions, no avr code
helper_test.cpp  <-- unit test for helpers

Arduino将尝试包含helper_test.cpp,并且会因为包含单元测试库头文件(恰好是谷歌测试)而感到困惑。如果单元测试包含C main函数,它将跳过main.ino中的所有内容,并尝试仅使用它。

我知道有专门的arduino单元测试框架,这些只是针对数学函数的常规c ++单元测试,不会触及任何与avr相关的代码。

如何将这些文件排除或使其成为如此arduino不会尝试包含helper_test.cpp但是会包含helper.cpp?

4 个答案:

答案 0 :(得分:0)

您需要创建两个单独的项目。一个项目将包含您的生产代码。它将包含以下文件:

main.ino  <-- main sketch
helper.cpp  <-- header for helper functions
helper.cpp  <-- implementation for helper functions

以及创建arduino应用程序所需的所有其他文件。当您想要创建应用程序时,您将构建它。另一个项目将是一个标准的可执行文件,它将运行单元测试:

main_test.cpp  <-- main 
helper_test.cpp  <-- unit test for helpers
../arduino_project/helper.h <-- header for helper functions
../arduino_project/helper.cpp <-- implementation for helper functions

每次添加新函数或对某个帮助函数进行更改时,都会构建此可执行文件并运行它以查看是否所有测试都通过。如您所见,此项目将添加文件(包含将要测试的函数)从你的主项目。最好的方法是从主项目添加源文件的位置作为单元测试项目的附加包含目录。

答案 1 :(得分:0)

让他包含它,但排除所有代码。我的意思是:

File test_enablers.h
#define INCLUDE_HELPER_TEST

File helper_test.cpp
#include "test_enablers.h"
#ifdef INCLUDE_HELPER_TEST
... your helper test code
#endif /* INCLUDE_HELPER_TEST */

您可以根据需要添加任意数量的测试文件;只需在.h文件中添加标记

如果要禁用测试文件,只需注释#define,该文件将不会被编译。

如果你想在其他一些文件中排除某些代码(例如main中的设置和循环函数,因为你已经在测试中实现了它,只需写一下

File main.ino
#include "test_enablers.h"
#ifndef INCLUDE_HELPER_TEST
... your production setup and loop
#endif /* INCLUDE_HELPER_TEST */

(请注意ifndef代替ifdef

答案 2 :(得分:0)

我不认为Arduino编译器(和相关系统)设置为处理单元测试,我必须构建my own framework to do this我在this answer to a related Arduino-unit-testing question中写过的内容。

为此,您需要将大部分代码放在库中,并且单元测试将存储为名为test/的库的子目录。您可以通过将它们放在库的examples/目录中来测试完整的草图,但只能对这些草图进行编译。

答案 3 :(得分:0)

如果要进行单元测试,只需创建将执行一项任务的代码。可以购买逻辑分析仪并检查端口的输出,以查看是否正在传送正确的信号。由于Arduinos的性质,在大多数情况下,单元测试必须以不同方式完成。希望这可以帮助。