使用GTEST进行Arduino单元测试
Arduino unit testing using gtest
我一直在玩我购买的一个小arduino机器人定位错误的代码。问题是#include" arduino.h"不是我可以在PC上运行的东西。这是我很难与代码解耦。
我想在我的测试文件夹中构建一个可以在我的PC上运行的测试可执行文件,但仍将大部分功能代码保留在上面的目录中,以便Arduino IDE也可以构建。任何帮助将不胜感激。
结构:
<Folder>
-ArduinoBuild.ino
-Class.h
-Class.cpp
-<test folder>
--test.cpp
--CMakeList.txt
这是问题开始的地方,将arduino.h介绍给构建
class.h
#ifndef CLASS_H_
#define CLASS_H_
#include "Arduino.h"
class Class{
public:
int Some_Attribute = 0;
void member_function();
};
#endif
class.cpp
#include "Class.h"
void Class::member_function(){
Some_Attribute = Some_ArduinoFunc(this->Some_Attribute);
}
现在,如果我可以从构建中获得arduino.h,我可以在测试脚本中放置虚拟功能以弥补差距,但是我想将Arduino.h保留在构建过程中的某个地方,所以我不喜欢这样。每次我想为我的arduino构建时,都必须去添加它。我已经尝试了几件事,其中一个正在将#include" arduino.h"移到.ino文件中,希望它可以流向class.h/cpp for Arduino时的class.h/cpp文件,并且失败了。
test.cpp
// Class_test.cpp
#include <gtest/gtest.h>
#include "../Class.cpp"
TEST(buildbin, member_function) {
Class car;
car.member_function(1);
ASSERT_EQ(1, car.Some_Attribute);
}
再次,对此的任何帮助将不胜感激,谢谢您的时间。
发布解决方案更新:这是我必须输入的示例标头:
:#ifndef ARDUINO
#include<cmath>
#define floor std::round
void delay(int i){}
#endif
并访问文件到模拟库文件,您需要做的就是:
#include "test/FakeLib.XX"
使用宏。
您可以使用#ifdef
... #endif
选择性地包括代码。示例:
#ifdef ARDUINO_VERSION
#include "Arduino.h"
#endif
void setup() {
// no setup
}
void loop() {
#ifdef ARDUINO_VERSION
digitalWrite(1, HIGH);
#else
printf("Setting pin 1 highn");
#endif
}
也有相反的 #ifndef
,仅当arduino_version 未定义时,它才包含代码。
现在您可能会问,编译器如何知道是否是Arduino_version?好问题。基于此线程,看起来Arduino将为您定义ARDUINO
,因此您可以使用#ifdef ARDUINO
。另外,由于您应该对测试的编译方式有更多控制权,因此可以使用#ifdef TEST_VERSION
,然后使用-DTEST_VERSION
选项编译测试。
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 用于交叉编译和CMake的预处理器宏的单元测试
- C++ 用于单元测试的模板模板
- 提升 1.64 单元测试编译失败
- 单元测试欧拉到四元数实现失败
- 运行 C++ 单元测试时LNK2005链接错误
- 禁用自动捕获 Googletest 单元测试中的C++异常
- 有没有办法在不使用 #ifdef 的情况下不编译发布版本中的单元测试函数体?
- 使用 Google Test 对自定义断言函数进行单元测试
- 如何将我的 CMake 项目配置为运行所有单元测试?
- 在Qt C++单元测试中动态加载QQuickWindow而不是QQuickWidget
- MS 本机单元测试 - 断言::线程失败不起作用
- 如何获取 CMake 单元测试的相对路径?
- QTimer 超时不会在单元测试中触发
- 如何在提升构建中设置环境变量以进行提升单元测试框架?
- 使用GTEST进行Arduino单元测试
- Arduino-使用VS2015进行简单的基于类的单元测试
- 单元测试Arduino类