Establish patterns for unit tests that verify software units against requirements with safety-class-appropriate rigor.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add lilinji/GeneTind-Life-Skills --skill unit-testing --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Unit Testing?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/lilinji-unit-testing)More formats (shields.io, HTML) on the badges page.
---
skill_id: TEST-UNIT
version: 1.0.0
last_updated: 2026-01-04
applies_to: [Class A, Class B, Class C]
jurisdiction: [Global]
prerequisites: [FW-EMBEDDED-C, FW-HAL, ARCH-SAFETY-CLASS]
---
# Unit Testing for Medical Device Software
## Purpose
Establish patterns for unit tests that verify software units against requirements with safety-class-appropriate rigor.
## When to Apply
- New or changed functions/modules, especially safety-related.
- Bug fixes to prevent regression.
## Requirements (testable)
1. Structure: Use Arrange-Act-Assert pattern; deterministic tests with clear preconditions. Rationale: readability and reliability.
2. Coverage by Class: Class A: statement/branch; Class B/C: branch plus MC/DC where feasible for control logic. Rationale: risk-proportional assurance.
3. Isolation: Use mocks/stubs for hardware/HAL; no real hardware in unit tests. Rationale: determinism.
4. Traceability: Each test links to requirement ID(s) and risk controls where relevant. Rationale: compliance and impact analysis.
5. Negative Cases: Include invalid inputs, boundary conditions, and fault paths. Rationale: robustness.
6. CI Integration: Tests run in CI; failures block merges; results archived. Rationale: continuous assurance.
## Recommended Practices
- Keep tests fast (<1s each) to encourage frequent runs.
- Use table-driven tests for combinations; parametrize to reduce duplication.
- Enforce `-Wall -Wextra -Werror` in test builds.
- Add sanitizers (ASan/UBSan) on host where possible for non-embedded logic.
## Patterns
C unit test with Unity (example):
```c
// TEST-UNIT-105 covers REQ-C-TYPE-01
TEST(SumSamples, AccumulatesAll) {
uint16_t s[] = {1, 2, 3};
CHECK_EQUAL(6, sum_samples(s, 3));
}
```
Boundary test:
```c
// TEST-UNIT-110 covers REQ-DEF-INPUT-01
TEST(ValidateFlow, RejectsNegative) {
CHECK_FALSE(validate_flow(-1.0f));
}
```
Mock HAL:
```c
// TEST-UNIT-120 covers REQ-HAL-IF-01
MOCK_FUNCTION_WITH_RETURN(hal_status_t, hal_uart_write, const uint8_t*, size_t, size_t*);
```
## Anti-Patterns (risks)
- Tests that depend on real timing or hardware -> risk: flakiness.
- No negative/boundary tests -> risk: missed edge defects.
- Untagged tests with requirements -> risk: broken traceability.
- Ignoring test failures in CI -> risk: regressions ship.
## Verification Checklist
- [ ] Tests follow AAA and are deterministic.
- [ ] Coverage meets class targets (branch/MC-DC for critical logic).
- [ ] Hardware/HAL calls mocked; no real hardware dependencies.
- [ ] Requirements/risk IDs referenced in tests.
- [ ] Negative/boundary cases included.
- [ ] Tests run in CI with warnings-as-errors; failures block merges.
## Traceability
- Map `TEST-UNIT-###` to `REQ-###`; store coverage reports per release.
## References
- IEC 62304 unit implementation/verification (5.5).
- ISO 14971 for risk-based test depth.
## Changelog
- 1.0.0 (2026-01-04): Initial unit testing skill with coverage targets and traceability.
## Audit History
- **2026-01-04**: Audit performed. Verified:
- IEC 62304 section 5.5 reference for unit implementation/verification is accurate
- MC/DC requirement for Class B/C control logic aligns with industry practice
- Unity test framework examples are syntactically correct
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!