Google Mock在Fixture中依赖注入报‘抽象类类型非法new表达式’错误排查
问题原因与解决方案
你的代码逻辑本身没有问题,编译错误来自链接阶段缺少Google Test/Mock库的依赖,和你担心的TestBody()虚函数、Mock实现遗漏无关,具体解决方式如下:
1. 补全Compiler Explorer的链接配置
在Compiler Explorer中,需要在「Compiler Flags」里添加链接参数,让编译器找到Google Test和Mock的库文件:
-lgtest -lgmock -pthread
这是因为MOCK_METHOD宏生成的Mock类实现代码,需要依赖预编译的GTest/Gmock库才能正常链接。
2. 代码细节优化(非编译错误原因,但更规范)
测试类里的printer成员可以直接声明为std::unique_ptr<NiceMock<MockPrinter>>,避免不必要的类型转换,代码更清晰:
std::unique_ptr<NiceMock<MockPrinter>> printer;
关于TestBody()的疑问
你用TEST_F宏编写测试用例时,这个宏会自动帮你生成TestBody()的实现,完全不需要手动编写,所以这部分不存在遗漏问题,编译器错误和它无关。
如果是在本地环境编译,同样要确保构建脚本(比如CMake/Makefile)中正确链接GTest、Gmock和线程库,比如CMake配置:
target_link_libraries(your_test_target gtest gmock pthread)
内容的提问来源于stack exchange,提问作者Bas Brussen
相关产品推荐
相关产品推荐

