You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:10:12