能否在C++Builder 11.2的单元测试中使用Googlemock模拟对象?
GoogleMock在C++Builder 11.2中的可用性
GoogleMock可用于构建模拟类,借此能够检测某个方法是否调用了另一个方法、调用时传入的参数是什么,还能影响被调用方法的行为。比如要测试UnderTest类中的a()方法是否实际调用了b()方法,可按以下步骤实现:
1. 定义待测试类
class UnderTest { public: /// Method a() calls method b(). virtual void a() {b();} /// Method b() does nothing. virtual void b() {} };
2. 编写模拟类
class UnderTestMock : public UnderTest { public: MOCK_METHOD0(b, void()); };
3. 编写测试用例
TEST(UnderTest, aCallsB) { UnderTestMock mock; EXPECT_CALL(mock, b()); mock.a(); }
能否在C++Builder 11.2中这样使用?
可以,但需要注意几个关键事项:
- 编译器兼容性:CBuilder 11.2采用Clang增强版C编译器,对C11及以上特性支持完善,而GoogleMock依赖C11及更高版本特性,需确保项目C标准设置为C11或更高(可在项目选项中调整)。
- 编译配置:需正确引入GoogleTest和GoogleMock的头文件与库文件,保证链接器能匹配对应编译模式(Debug/Release、32位/64位)的静态或动态库。
- 宏定义适配:部分GoogleMock宏在C++Builder环境下可能需微调,比如处理编译器特定扩展或警告,可通过添加
GTEST_HAS_TR1_TUPLE=0这类编译器宏解决潜在冲突。 - 虚拟方法要求:示例中
UnderTest的a()和b()均为虚方法,这是GoogleMock正确模拟的前提,C++Builder对虚方法的处理符合标准,无兼容性问题。
只要配置到位,就能在C++Builder 11.2中按示例方式使用GoogleMock完成方法调用验证。
内容的提问来源于stack exchange,提问作者T. Herzke
相关产品推荐
相关产品推荐

