GoogleMock让我在mock类中实现析构函数吗
Does GoogleMock make me implement destructor in mock class?
我在运行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
模板参数用于任何事情,所以它可能是一个常规类。
相关文章:
- 如何在 CRTP 中实现析构函数?
- 如何使用指针向量实现类析构函数 C++.
- 使用shared_ptr时需要实现析构函数、复制构造函数、赋值运算符
- 当声明了虚拟析构函数但没有实现时会发生什么情况
- 如何实现在构造函数中使用自身的对象的析构函数
- 如何实现纯虚拟析构函数
- C++ 链接列表队列实现和析构函数错误:"Aborted (Core Dumped)"
- 为什么纯虚拟析构函数需要实现
- GoogleMock让我在mock类中实现析构函数吗
- 根据析构函数和移动构造函数实现移动赋值
- 重写默认构造函数/析构函数而不实现它们
- G++ 警告,缺少纯虚拟析构函数的实现
- C++ 抽象类是否应该为(虚拟)析构函数提供实现
- 静态字段的析构函数.辛格尔顿实现
- 当在头文件上而不是在CPP文件上实现时,析构函数会导致内存泄漏——仅在linux上实现
- 生产编译器如何在流控制上实现析构函数处理
- 为什么我们没有义务实现纯虚析构函数
- 单链表-由于析构函数实现导致的分段错误
- 使用D_ptr实现析构函数
- 实现析构函数