Unity/Ceedling Test Skill
Overview
This skill provides embedded unit testing capabilities using the Unity test framework, CMock mock generation, and Ceedling build system for comprehensive off-target and on-target testing.
Capabilities
Unity Test Framework
- Test case generation
- Assertion macro usage
- Test fixture setup/teardown
- Test group organization
- Parameterized tests
- Custom assertions
CMock Mock Generation
- Automatic mock generation from headers
- HAL/driver mocking strategies
- Callback mocking
- Argument capture and validation
- Return value configuration
- Call count verification
Ceedling Build System
- Project configuration (project.yml)
- Test runner generation
- Coverage integration
- Compiler configuration
- Plugin management
- CI/CD integration
Hardware Abstraction Mocking
- Register mock strategies
- DMA mock patterns
- Interrupt mock handling
- Timing mock approaches
- State machine mocking
Test Coverage
- gcov integration
- lcov report generation
- Branch coverage analysis
- MC/DC coverage (for safety)
- Coverage threshold enforcement
Off-Target Testing
- Host compilation setup
- Platform abstraction
- Stub implementation
- Double buffering for DMA
- Fake timer implementations
Target Processes
embedded-unit-testing.js- Unit test implementationdevice-driver-development.js- Driver testingbsp-development.js- BSP unit testing
Dependencies
- Unity test framework
- CMock mock generator
- Ceedling build system (optional)
- gcov/lcov for coverage
Usage Context
This skill is invoked when tasks require:
- Unit test development
- Mock generation for drivers
- Test coverage analysis
- Off-target testing setup
- TDD for embedded
Project Structure
project/
src/
driver.c
driver.h
test/
test_driver.c
support/
test_helper.c
build/
test/
artifacts/
project.yml
Configuration Example (project.yml)
:project:
:build_root: build/
:test_file_prefix: test_
:use_exceptions: FALSE
:paths:
:test:
- test/**
:source:
- src/**
:include:
- inc/**
:cmock:
:mock_prefix: mock_
:when_no_prototypes: :warn
:enforce_strict_ordering: TRUE
:plugins:
- :ignore
- :callback
- :return_thru_ptr
:plugins:
:enabled:
- gcov
- xml_tests_report
Test Example
#include "unity.h"
#include "driver.h"
#include "mock_hal_spi.h"
void setUp(void) {
driver_init();
}
void tearDown(void) {
driver_deinit();
}
void test_driver_sends_correct_command(void) {
uint8_t expected[] = {0x01, 0x02, 0x03};
HAL_SPI_Transmit_ExpectWithArrayAndReturn(
SPI1, expected, 3, 3, 100, HAL_OK);
TEST_ASSERT_EQUAL(DRIVER_OK, driver_send_command(0x01));
}