ROS 2 TDD Workflow
Core Principles
- •Tests FIRST: Write
gtestorpytestbefore implementation. - •Red-Green-Refactor: Test fail -> Code fix -> Optimize.
- •Integration: Use
launch_testingfor node interaction tests.
Workflow
1. Define Requirements (User Story)
"As a robot, I need to stop when obstacle < 0.5m."
2. Write Test Case
C++ (GTest)
cpp
TEST_F(SafetyNodeTest, StopsOnObstacle) {
node_->publish_scan(0.4); // Simulate 0.4m
auto cmd = node_->get_cmd_vel();
EXPECT_EQ(cmd.linear.x, 0.0);
}
Python (Pytest)
python
def test_stop_on_obstacle(safety_node):
safety_node.publish_scan(0.4)
cmd = safety_node.get_cmd_vel()
assert cmd.linear.x == 0.0
3. Run Test (Fail)
bash
colcon test --packages-select my_safety_pkg
4. Implement Logic
Write minimal code in safety_node to pass the test.
5. Verify & Coverage
bash
colcon test --packages-select my_safety_pkg colcon test-result --all
Tools
- •Unit:
ament_cmake_gtest,ament_cmake_pytest - •Integration:
launch_testing,osrf_pycommon - •Mocking:
gmock(C++),unittest.mock(Python)