Unit Testing of a “Blink” Project
The goal of this tutorial is to demonstrate how simple it is to use Unit Testing.
Level: Beginner
Platforms: Windows, macOS, Linux
Setting Up the Project
Please navigate to the Quick Start section and create the “Blink Project”.
Create the root
test
directory in the project (on the same level assrc
)Create a test
test_blink
directory (name must be prefixed withtest_
) and place atest_main.cpp
file in it (the source code is located below).Run tests using the pio test command.
Project structure
project_dir
├── platformio.ini
└── test
└── test_blink
└── test_main.cpp
Source files
“platformio.ini” (Project Configuration File)
[env:uno] platform = atmelavr framework = arduino board = uno
test/test_blink/test_main.cpp
#include <Arduino.h> #include <unity.h> void setUp(void) { // set stuff up here } void tearDown(void) { // clean stuff up here } void test_led_builtin_pin_number(void) { TEST_ASSERT_EQUAL(13, LED_BUILTIN); } void test_led_state_high(void) { digitalWrite(LED_BUILTIN, HIGH); TEST_ASSERT_EQUAL(HIGH, digitalRead(LED_BUILTIN)); } void test_led_state_low(void) { digitalWrite(LED_BUILTIN, LOW); TEST_ASSERT_EQUAL(LOW, digitalRead(LED_BUILTIN)); } void setup() { // NOTE!!! Wait for >2 secs // if board doesn't support software reset via Serial.DTR/RTS delay(2000); pinMode(LED_BUILTIN, OUTPUT); UNITY_BEGIN(); // IMPORTANT LINE! RUN_TEST(test_led_builtin_pin_number); } uint8_t i = 0; uint8_t max_blinks = 5; void loop() { if (i < max_blinks) { RUN_TEST(test_led_state_high); delay(500); RUN_TEST(test_led_state_low); delay(500); i++; } else if (i == max_blinks) { UNITY_END(); // stop unit testing } }
Test results
> pio test
Verbose mode can be enabled via `-v, --verbose` option
Collected 1 tests
Processing test_blink in uno environment
----------------------------------------
Building...
Uploading...
Testing...
If you don't see any output for the first 10 secs, please reset board (press reset button)
test/test_blink/test_main.cpp:34: test_led_builtin_pin_number [PASSED]
test/test_blink/test_main.cpp:43: test_led_state_high [PASSED]
test/test_blink/test_main.cpp:45: test_led_state_low [PASSED]
test/test_blink/test_main.cpp:43: test_led_state_high [PASSED]
test/test_blink/test_main.cpp:45: test_led_state_low [PASSED]
test/test_blink/test_main.cpp:43: test_led_state_high [PASSED]
test/test_blink/test_main.cpp:45: test_led_state_low [PASSED]
test/test_blink/test_main.cpp:43: test_led_state_high [PASSED]
test/test_blink/test_main.cpp:45: test_led_state_low [PASSED]
test/test_blink/test_main.cpp:43: test_led_state_high [PASSED]
test/test_blink/test_main.cpp:45: test_led_state_low [PASSED]
----------------- uno:test_blink [PASSED] Took 16.51 seconds -----------------
Environment Test Status Duration
------------- ---------- -------- ------------
uno test_blink PASSED 00:00:16.514
=================== 11 test cases: 11 succeeded in 00:00:16.514 ===================