【发布时间】:2022-08-10 23:17:21
【问题描述】:
尝试使用 Gtest 和 Gmock 为类模板实现单元测试,但在使用 EXPECT_CALL 时遇到了一些问题。
我的抽象类:
#pragma once
template <class T>
class AbstractMessageQueue {
public:
virtual ~AbstractMessageQueue() {}
virtual T dequeue() = 0;
}
我的模拟课:mocks/MockMessageQueue.hpp
#include <gmock/gmock.h>
#include \"AbstractMessageQueue.hpp\"
template <class T>
class MockMessageQueue : public AbstractMessageQueue<T> {
public:
MockMessageQueue(){}
~MockMessageQueue(){}
MOCK_METHOD(T, dequeue, (), (override));
}
我的测试:
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include \"./mocks/MockMessageQueue.hpp\"
using ::testing::StrictMock;
namespace my {
namespace project {
namespace {
class TestFixture : public ::testing::Test {
public:
StrictMock<MockMessageQueue<int>> a{};
AbstractMessageQueue<int>& queue = a ;
};
TEST_F(TestFixture, test1){
EXPECT_CALL(queue, dequeue()).Times(1); //!!ERROR error: ‘class AbstractMessageQueue<int>’ has no member named ‘gmock_dequeue’; did you mean ‘dequeue’?
queue.dequeue();
}
}}}
我在 EXPECT_CALL 行上收到以下编译错误:error: ‘class AbstractMessageQueue<int>’ has no member named ‘gmock_dequeue’; did you mean ‘dequeue’?
我无法弄清楚这里有什么问题。如果我用EXPECT_CALL 注释该行,我可以使测试编译,它会因为以下原因而失败:Uninteresting mock function call - returning default value.
在我看来,这意味着 Mock 确实在工作,而失败是由 StrickMock 引起的
有人可以发光吗? 谢谢
标签: c++ unit-testing googletest googlemock