gmock 如何mock一个模板类单例

直接看代码

#include <gtest/gtest.h>
#include <gmock/gmock.h>

using ::testing::Return;
using ::testing::_;

template<typename T>
class mockFoo{
public:
    static mockFoo& GetInstance(){
        static mockFoo instance;
        return instance;
    }
    MOCK_METHOD(T, bar, (const T&), ());
protected:
    mockFoo() = default;
    ~mockFoo() = default;
    mockFoo(const mockFoo&) = delete;
    mockFoo& operator=(const mockFoo&) = delete;
};

class fooTest : public ::testing::Test {
protected:
    void SetUp() override {
    }
    void TearDown() override {
    }
};

TEST_F(fooTest, fooTest1){
    auto& ins = mockFoo<int>::GetInstance();
    EXPECT_CALL(ins, bar(_)).WillOnce(Return(42));
    EXPECT_EQ(ins.bar(1), 42);
}

int main(int argc, char** argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

红帽系安装gtest:

sudo dnf install gtest gtest-devel gmock-devel

编译:

g++ -std=c++17 main.cpp -lgtest -lgmock -lpthread -o test

posted @ 2025-12-24 21:25  mariocanfly  阅读(3)  评论(0)    收藏  举报