Configuring rostest¶
Use rostest whenever your unit tests require a roscore for running ROS nodes.
package.xml¶
Declare rostest
as a test dependency, along with any other
test-only dependencies:
<test_depend>rostest</test_depend>
CMakeLists.txt¶
You need a find_package()
for rostest
to define the necessary
CMake commands. It is better not to use a second
find_package(catkin ...)
for test dependencies like rostest,
because that would reset important catkin CMake variables, making it
hard to build test programs.
Place both the find_package()
and your test declarations inside
the conditional testing block:
if (CATKIN_ENABLE_TESTING)
find_package(rostest REQUIRED)
add_rostest(tests/your_first_rostest.test)
add_rostest(tests/your_second_rostest.test)
endif()
In case you have a test that accepts arguments, you can pass them like this:
add_rostest(tests/your_rostest.test ARGS arg1:=true arg2:=false)
If your rostest needs extra data in order to run, you can use the
catkin_download_test_data()
to download the data.
Read more about Downloading test data.
Then you can add a dependency between the rostest target and the
target from catkin_download_test_data()
, in order to download the
data before the rostest runs:
if (CATKIN_ENABLE_TESTING)
find_package(rostest REQUIRED)
catkin_download_test_data(
${PROJECT_NAME}_32e.pcap
http://download.ros.org/data/velodyne/32e.pcap
MD5 e41d02aac34f0967c03a5597e1d554a9)
add_rostest(tests/your_rostest.test DEPENDENCIES ${PROJECT_NAME}_32e.pcap)
endif()
If your rostest also uses a gtest executable, there is a convenience function:
if (CATKIN_ENABLE_TESTING)
add_rostest_gtest(your_gtest_node
tests/your_third_rostest.test
tests/your_gtest_node.cpp)
target_link_libraries(your_gtest_node ${catkin_LIBRARIES})
endif()
Any additional library dependencies would be added to the
target_link_libraries()
, as usual.
For more details on writing and running rostests, see the rostest documentation.