Testing¶
Test-driven development practices for Radix Relay.
Testing Philosophy¶
Radix Relay follows BDD/TDD principles:
- Red - Write a failing test
- Green - Make it pass
- Refactor - Clean up code
Running Tests¶
All Tests¶
Specific Test¶
With Output¶
Test Organization¶
test/
├── *_tests.cpp # C++ unit tests
├── test_doubles/ # Test doubles (mocks, stubs)
└── CMakeLists.txt
Writing Tests¶
C++ Tests (Catch2)¶
#include <catch2/catch_test_macros.hpp>
TEST_CASE("Feature description", "[tag]") {
SECTION("Specific behavior") {
// Arrange
auto sut = SystemUnderTest();
// Act
auto result = sut.doSomething();
// Assert
REQUIRE(result == expected);
}
}
Rust Tests¶
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_feature() {
// Arrange
let sut = SystemUnderTest::new();
// Act
let result = sut.do_something();
// Assert
assert_eq!(result, expected);
}
}
Test Coverage¶
Run with coverage:
cmake --preset=unixlike-clang-debug -DENABLE_COVERAGE=ON
cmake --build --preset=unixlike-clang-debug
ctest --preset=test-unixlike-clang-debug
Best Practices¶
- Test behavior, not implementation
- One assertion per test (when possible)
- Use descriptive test names
- Keep tests fast
- Make tests deterministic