Skip to content

Commit

Permalink
Add test using fakeit
Browse files Browse the repository at this point in the history
  • Loading branch information
ShotaAk committed Dec 19, 2023
1 parent fff93cd commit 6b66ff4
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 6 deletions.
20 changes: 18 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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()
14 changes: 13 additions & 1 deletion include/rt_usb_9axisimu_driver/rt_usb_9axisimu.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
4 changes: 2 additions & 2 deletions include/rt_usb_9axisimu_driver/rt_usb_9axisimu_driver.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
class RtUsb9axisimuRosDriver
{
private:
std::unique_ptr<rt_usb_9axisimu::SerialPort> serial_port_;
std::unique_ptr<rt_usb_9axisimu::SerialPortInterface> serial_port_;

rt_usb_9axisimu::SensorData sensor_data_;

Expand Down Expand Up @@ -81,7 +81,7 @@ class RtUsb9axisimuRosDriver

public:
explicit RtUsb9axisimuRosDriver(std::string serialport);
RtUsb9axisimuRosDriver(std::unique_ptr<rt_usb_9axisimu::SerialPort> serial_port, std::string port_name);
RtUsb9axisimuRosDriver(std::unique_ptr<rt_usb_9axisimu::SerialPortInterface> serial_port, std::string port_name);
~RtUsb9axisimuRosDriver();

void setImuFrameIdName(std::string frame_id);
Expand Down
2 changes: 1 addition & 1 deletion src/rt_usb_9axisimu_driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ RtUsb9axisimuRosDriver::RtUsb9axisimuRosDriver(std::string port = "")
has_refreshed_imu_data_ = false;
}

RtUsb9axisimuRosDriver::RtUsb9axisimuRosDriver(std::unique_ptr<rt_usb_9axisimu::SerialPort> serial_port, std::string port_name)
RtUsb9axisimuRosDriver::RtUsb9axisimuRosDriver(std::unique_ptr<rt_usb_9axisimu::SerialPortInterface> serial_port, std::string port_name)
{
serial_port_ = std::move(serial_port);
serial_port_->setPort(port_name.c_str());
Expand Down
30 changes: 30 additions & 0 deletions test/test_driver.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@

#include <gtest/gtest.h>
#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<SerialPortInterface> 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<SerialPortInterface> mock_ptr(&mock.get());
RtUsb9axisimuRosDriver driver(std::move(mock_ptr), "/dev/ttyUSB0");

EXPECT_EQ(driver.startCommunication(), true);
EXPECT_EQ(driver.startCommunication(), false);
}

0 comments on commit 6b66ff4

Please sign in to comment.