c++ - GoogleMock 是否让我在模拟类中实现析构函数?

标签 c++ googletest googlemock

我在运行 make 时不断收到这些错误:

debug/main.o: In function `MockMQAdapter<SomeClass>::MockMQAdapter()':
/source/Tests/testsfoo/MockMQAdapter.h:30: undefined reference to `MQAdapter<SomeClass>::~MQAdapter()'
debug/main.o:(.rodata._ZTVN2TW9MQAdapterI6ThingyEE[_ZTVN2TW9MQAdapterI6ThingyEE]+0x10): undefined reference to MQAdapter<SomeClass>::~MQAdapter()'
debug/main.o:(.rodata._ZTVN2TW9MQAdapterI6ThingyEE[_ZTVN2TW9MQAdapterI6ThingyEE]+0x18): undefined reference to `MQAdapter<SomeClass>::~MQAdapter()'
debug/main.o:(.rodata._ZTVN2TW9MQAdapterI6ThingyEE[_ZTVN2TW9MQAdapterI6ThingyEE]+0x20): undefined reference to `MQAdapter<SomeClass>::publish(std::string const&, std::string &message)'

这是我的代码:

#include <gmock/gmock.h>

template<typename S>
class MQAdapter {
public:
    MQAdapter(const std::string host, uint16_t port);
    virtual ~MQAdapter();
    virtual void publish(const std::string queue, std::string message);
};

MQAdapter::MQAdapter(const std::string host, uint16_t port) {}

//Generated by gmock_gen.py
template <typename T0>
class MockMQAdapter : public MQAdapter<T0> {
 public:
  MOCK_METHOD2_T(publish,
      void(std::string, std::string));
};

我非常仔细地遵循了谷歌模拟指南。我不明白这些错误是什么意思。这是我的测试结果:

TEST(MyTest, ExpectCall) {
  MockMQAdapter<SomeClass> *adapter = new MockMQAdapter<SomeClass>("host", 1);
  EXPECT_CALL(*adapter, publish("hi", "hello"));
  adapter->publish("hi", "hello");
}

最佳答案

您已声明 MQAdapter 析构函数,但未定义它。因此,链接器在尝试解决它时会提示。提供一个定义,default 就足够了,即 virtual ~MQAdapter() = default;

另一方面,构造函数的定义应该是内联的或者用模板参数限定:

template <typename S>
MQAdapter<S>::MQAdapter(const std::string host, uint16_t port) {}

我猜这是因为这只是一个示例,但您没有对任何内容使用 MQAdapter 模板参数,因此它可能是一个常规类。

关于c++ - GoogleMock 是否让我在模拟类中实现析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36656661/

相关文章:

c++ - asm.js 规范中提到的 c/c++ 虚拟机是什么

c++ - PrintTo 用于 Google Test 中的指针

c++ - 模拟类可以从 googlemock 中的另一个模拟类继承吗?

c++ - 对原始套接字的读取可以一次返回多个数据包吗?

c++ - 如何在 std::bind 中指示给定签名的重载函数?

java - 我应该如何在 jna 中按值从 Java 传递和返回 unsigned int 到 C/C++

c++ - .CPP中的类定义时,CMake for Google测试

c++ - Google 测试和 std::vector 范围异常

c++ - gtest/gmock 是否有办法对类的每个实例进行 stub ?

c++ - 无法使用gmock/gmock.h构建C/C++程序,生成太多错误