我是一个相当新的软件开发人员,目前正在向多年前开始的现有 C++ 项目添加单元测试。由于非技术原因,我不允许修改任何现有代码。我所有模块的基类都有一堆设置/获取数据和与其他模块通信的方法。
因为我只想对每个单独的模块进行单元测试,所以我希望能够为我的所有模块间通信方法使用固定值。即对于检查另一个模块是否处于活动状态的方法 Ping(),我希望它根据我正在做的测试类型返回 true 或 false。我一直在研究 Google Test 和 Google Mock,它确实支持模拟非虚拟方法。然而,所描述的方法(http://code.google.com/p/googlemock/wiki/CookBook#Mocking_Nonvirtual_Methods)要求我将原始方法“模板化”以获取真实或模拟对象。由于前面提到的要求,我不能在基类中模板化我的方法,所以我需要一些其他方法来模拟这些虚拟方法
基本上,我想模拟的方法在某个基类中,我想单元测试和创建模拟的模块是该基类的派生类。在我的基本 Module 类和我想要测试的模块之间有中间模块。
我将不胜感激任何建议!
谢谢,
JW
编辑:更具体的例子
我的基类是 rootModule,我要测试的模块是 leafModule。有一个继承自rootModule的中间模块,leafModule继承自这个中间模块。
在我的leafModule 中,我想测试doStuff() 方法,该方法调用rootModule 类中定义的非虚拟GetStatus(moduleName)。我需要以某种方式使 GetStatus() 返回一个选定的罐头值。模拟对我来说是新的,所以使用模拟对象甚至是正确的方法吗?