From 6b66ff45f28a7236732fb1165765997124ac757e Mon Sep 17 00:00:00 2001 From: ShotaAk Date: Tue, 19 Dec 2023 21:49:26 +0900 Subject: [PATCH] Add test using fakeit --- CMakeLists.txt | 20 +++++++++++-- .../rt_usb_9axisimu.hpp | 14 ++++++++- .../rt_usb_9axisimu_driver.hpp | 4 +-- src/rt_usb_9axisimu_driver.cpp | 2 +- test/test_driver.cpp | 30 +++++++++++++++++++ 5 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 test/test_driver.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 2711b4c..2db4440 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,9 +82,25 @@ install(DIRECTORY DESTINATION share/${PROJECT_NAME}/ ) -#if(BUILD_TESTING) +if(BUILD_TESTING) # find_package(ament_lint_auto REQUIRED) # ament_lint_auto_find_test_dependencies() -#endif() + Set(FETCHCONTENT_QUIET FALSE) + include(FetchContent) + FetchContent_Declare( + fakeit + GIT_REPOSITORY https://github.com/eranpeer/FakeIt + GIT_TAG 2.4.0 + GIT_PROGRESS TRUE) + FetchContent_MakeAvailable(fakeit) + + find_package(ament_cmake_gtest) + ament_add_gtest(test_driver test/test_driver.cpp src/rt_usb_9axisimu_driver.cpp) + target_include_directories(test_driver PRIVATE ${fakeit_SOURCE_DIR}/single_header/gtest) + ament_target_dependencies(test_driver + rclcpp + sensor_msgs + ) +endif() ament_package() \ No newline at end of file diff --git a/include/rt_usb_9axisimu_driver/rt_usb_9axisimu.hpp b/include/rt_usb_9axisimu_driver/rt_usb_9axisimu.hpp index 35970f1..2f17a11 100644 --- a/include/rt_usb_9axisimu_driver/rt_usb_9axisimu.hpp +++ b/include/rt_usb_9axisimu_driver/rt_usb_9axisimu.hpp @@ -165,7 +165,19 @@ class Consts * **********************************************************************************************************/ -class SerialPort +class SerialPortInterface +{ +public: + virtual ~SerialPortInterface() {} + virtual void setPort(const char * port) = 0; + virtual bool openPort(const char * port) = 0; + virtual bool openSerialPort() = 0; + virtual void closeSerialPort() = 0; + virtual int readFromDevice(unsigned char * buf, unsigned int buf_len) = 0; + virtual int writeToDevice(unsigned char * data, unsigned int data_len) = 0; +}; + +class SerialPort : public SerialPortInterface { private: std::string port_name_; // ex) "/dev/ttyACM0" diff --git a/include/rt_usb_9axisimu_driver/rt_usb_9axisimu_driver.hpp b/include/rt_usb_9axisimu_driver/rt_usb_9axisimu_driver.hpp index 28ceea1..ef76fa6 100644 --- a/include/rt_usb_9axisimu_driver/rt_usb_9axisimu_driver.hpp +++ b/include/rt_usb_9axisimu_driver/rt_usb_9axisimu_driver.hpp @@ -47,7 +47,7 @@ class RtUsb9axisimuRosDriver { private: - std::unique_ptr serial_port_; + std::unique_ptr serial_port_; rt_usb_9axisimu::SensorData sensor_data_; @@ -81,7 +81,7 @@ class RtUsb9axisimuRosDriver public: explicit RtUsb9axisimuRosDriver(std::string serialport); - RtUsb9axisimuRosDriver(std::unique_ptr serial_port, std::string port_name); + RtUsb9axisimuRosDriver(std::unique_ptr serial_port, std::string port_name); ~RtUsb9axisimuRosDriver(); void setImuFrameIdName(std::string frame_id); diff --git a/src/rt_usb_9axisimu_driver.cpp b/src/rt_usb_9axisimu_driver.cpp index e81a2a2..7893936 100644 --- a/src/rt_usb_9axisimu_driver.cpp +++ b/src/rt_usb_9axisimu_driver.cpp @@ -212,7 +212,7 @@ RtUsb9axisimuRosDriver::RtUsb9axisimuRosDriver(std::string port = "") has_refreshed_imu_data_ = false; } -RtUsb9axisimuRosDriver::RtUsb9axisimuRosDriver(std::unique_ptr serial_port, std::string port_name) +RtUsb9axisimuRosDriver::RtUsb9axisimuRosDriver(std::unique_ptr serial_port, std::string port_name) { serial_port_ = std::move(serial_port); serial_port_->setPort(port_name.c_str()); diff --git a/test/test_driver.cpp b/test/test_driver.cpp new file mode 100644 index 0000000..cc193b1 --- /dev/null +++ b/test/test_driver.cpp @@ -0,0 +1,30 @@ + +#include +#include "rt_usb_9axisimu_driver/rt_usb_9axisimu_driver.hpp" +#include "rt_usb_9axisimu_driver/rt_usb_9axisimu.hpp" + +#include "fakeit.hpp" +using namespace fakeit; +using namespace rt_usb_9axisimu; + +TEST(TestDriver, startCommunication) +{ + // Mock settings + // TODO(ShotAk): Use test fixture + Mock mock; + When(Method(mock, setPort).Using(Any())).AlwaysReturn(); + When(Method(mock, openPort)).Return(true); + When(Method(mock, openSerialPort)).Return(true); + When(Method(mock, closeSerialPort)); + When(Method(mock, readFromDevice)).AlwaysReturn(0); + When(Method(mock, writeToDevice)).AlwaysReturn(0); + + // Set mock method for this test + When(Method(mock, openSerialPort)).Return(true, false); + + std::unique_ptr mock_ptr(&mock.get()); + RtUsb9axisimuRosDriver driver(std::move(mock_ptr), "/dev/ttyUSB0"); + + EXPECT_EQ(driver.startCommunication(), true); + EXPECT_EQ(driver.startCommunication(), false); +}