【问题标题】:Google Test Gmock - Mocking Class Templates, trouble on EXPECT_CALLGoogle Test Gmock - 模拟类模板,EXPECT_CALL 上的麻烦
【发布时间】: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&lt;int&gt;’ 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


    【解决方案1】:

    EXPECT_CALL 应该得到模拟对象。

    EXPECT_CALL(queue, dequeue())
    

    应该

    EXPECT_CALL(a, dequeue())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多