该程序允许自动运行多个Arduino单元测试。测试过程在PC上启动,但测试在实际的Arduino硬件上运行。一组单元测试通常用于测试一个Arduino库。 (这个
Arduino论坛: http://arduino.cc/forum/index.php?topic=140027.0
GitHub项目页面: http://jeroendoggen.github.com/Arduino-TestSuite
Python包索引中的页面: http://pypi.python.org/pypi/arduino_testsuite
单元测试使用“Arduino Unit Testing Library”编写: http://code.google.com/p/arduinounit
对每组单元测试执行以下步骤:
保持硬件特定的代码与其他代码分开或抽象,这样您就可以在任何平台上测试和调试更大的“休息”,这些平台上有很好的工具并且您最熟悉它。
基本上,尝试尽可能多地从尽可能多的已知工作构建块构建最终代码。然后,剩余的硬件特定工作将变得更加容易和快捷。您可以通过自己使用现有的模拟器和/或模拟设备来完成它。然后,当然,你需要以某种方式测试真实的东西。根据具体情况,可能会或可能不会很好地自动化(即谁或什么将按下按钮并提供其他输入?谁或什么将观察和解释各种指标和输出?)。
尝试 Autodesk电路仿真器 。它允许使用许多其他硬件组件测试Arduino代码和电路。
我不知道任何可以测试Arduino代码的平台。
但是,有 的 Fritzing 强> 平台,您可以使用它来建模硬件,然后导出PCB图表和东西。
值得一试。
如果您想在MCU外部(在桌面上)对代码进行单元测试,请查看libcheck: https://libcheck.github.io/check/
我用它来测试我自己的嵌入代码几次。这是非常强大的框架。
有一个名为的项目 n芯 ,为Arduino提供本机核心。并允许您编写Arduino代码的测试。
从项目描述
本机核心允许您编译和运行Arduino草图 PC,一般不做修改。它提供了原生版本 标准的Arduino函数,以及命令行的解释器 草图的输入通常来自硬件 本身。
也在 “我需要使用它”部分
如果你想构建测试,你需要cxxtest http://cxxtest.tigris.org 。 NCORE已经过cxxtest 3.10.1测试。
我建造了 arduino_ci 以此目的。虽然它仅限于测试Arduino库(而不是独立的草图),但它可以在本地或CI系统(如Travis CI或Appveyor)上运行单元测试。
arduino_ci
考虑一个名为Arduino Library目录的非常简单的库 DoSomething ,与 do-something.cpp :
DoSomething
do-something.cpp
#include <Arduino.h> #include "do-something.h" int doSomething(void) { return 4; };
您将按如下方式对其进行单元测试(使用名为的测试文件 test/is_four.cpp 或某些此类):
test/is_four.cpp
#include <ArduinoUnitTests.h> #include "../do-something.h" unittest(library_does_something) { assertEqual(4, doSomething()); } unittest_main() // this is a macro for main(). just go with it.
就这样。如果说 assertEqual 语法和测试结构看起来很熟悉,这是因为我采用了一些 Matthew Murdoch的ArduinoUnit图书馆 他提到的那个 他的回答 。
assertEqual
看到 Reference.md 有关单元测试I / O引脚,时钟,串行端口等的更多信息。
这些单元测试使用ruby gem中包含的脚本进行编译和运行。有关如何设置的示例,请参阅 README.md 或者只是从以下例子之一复制:
您可以使用 emulare 您可以在图表上拖放微控制器并在Eclipse中运行代码。网站上的文档告诉您如何设置它。
在基本的Arduino中用C和C ++编写,甚至arduino库也用C和C ++编写。因此,简单来说,只需将代码作为C和C ++处理,然后尝试进行单元测试。在这里,通过单词“handle”我的意思是你将所有基本语法(如serial.println)更改为sysout,将pinmode更改为varaibles,将void loop更改为while()循环,该循环在keystock中或在某次迭代后中断。
我知道这是一个漫长的过程而不是那么直接。根据我的个人经验,一旦你做到这一点,这将变得更加可靠。
-Nandha_Frost