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 - testdirectory in the project (on the same level as- src)
- Create a test - test_blinkdirectory (name must be prefixed with- test_) and place a- test_main.cppfile 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 ===================