C++单元测试中Mock外部依赖的方法
2014-07-07 21:35
211 查看
博客搬家,原文链接C++单元测试中Mock外部依赖的方法
本文只涉及在Makefile编译环境下在UT中Mock外部编译依赖的方法。
背景
假设现在有一个模块A,目录结构如下:
Makefile依赖了另外一半模块B,目录与A同级,目录架构如下:
这里B作为A的外部依赖模块而存在,A在Makefile中包含了B的头文件路径,并链接了libb.a
A模块的Makefile如下,
B模块包含网络交互、系统调用等等一些负责的操作,这些函数和类在a.cpp中被使用到。
问题
这个时候需要为A模块做单元测试,怎么办?
解决方法
因为不能将真正的B模块链接进来,否则A的UT代码将严重依赖外部环境甚至没法执行,因此可以通过在A模块的测试代码中编写Mock的方式来替代B中定义的类和函数等,并在UT代码的Makefile中完全替换头文件路径和链接库路径来达到目的。
在A下新建test目录用于专门存放UT代码
这时候为了让UT中A/src/a.cpp在不引用B模块的情况下照样能编译通过,需要在test目录下生成一个假的同名文件b.h,并在其中声明一样的类,函数等:
最后可以按照自己的需要在mock/mock_b.cpp中定义的mock/b.h中声明的和方法,并最终编译链接到UT的binary中去。
test目录下的Makefile如下
另外,可以结合google mock等工具,实现mock_b.cpp,这样一方面可以节约花费在mock上的时间,另外一方面还可以方便的利用google mock的框架做逻辑检验。
本文只涉及在Makefile编译环境下在UT中Mock外部编译依赖的方法。
背景
假设现在有一个模块A,目录结构如下:
A/Makeifle A/include/a.h A/src/a.cpp
Makefile依赖了另外一半模块B,目录与A同级,目录架构如下:
B/include/b.h B/lib/libb.a
这里B作为A的外部依赖模块而存在,A在Makefile中包含了B的头文件路径,并链接了libb.a
A模块的Makefile如下,
CXX=g++ INCPATH=-I../B/include -Iinclude a.o $(CXX) -c $(INCPATH) -o main src/a.cpp ../B/lib/libb.a
B模块包含网络交互、系统调用等等一些负责的操作,这些函数和类在a.cpp中被使用到。
问题
这个时候需要为A模块做单元测试,怎么办?
解决方法
因为不能将真正的B模块链接进来,否则A的UT代码将严重依赖外部环境甚至没法执行,因此可以通过在A模块的测试代码中编写Mock的方式来替代B中定义的类和函数等,并在UT代码的Makefile中完全替换头文件路径和链接库路径来达到目的。
在A下新建test目录用于专门存放UT代码
A/test/Makefle A/test/test_a.cpp
这时候为了让UT中A/src/a.cpp在不引用B模块的情况下照样能编译通过,需要在test目录下生成一个假的同名文件b.h,并在其中声明一样的类,函数等:
A/test/mock/b.h A/test/mock/mock_b.cpp
最后可以按照自己的需要在mock/mock_b.cpp中定义的mock/b.h中声明的和方法,并最终编译链接到UT的binary中去。
test目录下的Makefile如下
CXX=g++ INCPATH=-I../B/include -I../include —Imock a.o $(CXX) -c $(INCPATH) -o main ../src/a.cpp ../B/lib/libb.a mock/mock_b.cpp
另外,可以结合google mock等工具,实现mock_b.cpp,这样一方面可以节约花费在mock上的时间,另外一方面还可以方便的利用google mock的框架做逻辑检验。
相关文章推荐
- 关于c++中导入外部应用程序的方法
- C++ 工程实践(6):单元测试如何 mock 系统调用
- 。VS2010 C++项目设置外部库的方法
- Visaul Studio2015安装以及c++单元测试使用方法
- C++引入外部txt文件内容的方法
- c++调用外部程序方法
- [单元测试]PowerMock+SpringMVC整合并测试Controller层方法(一)
- C++中外部程序的调用方法
- C++ ODBC 函数报无法解析的外部函数错误的解决方法
- c/c++工程中外部头文件及库添加方法
- 单元测试中PowerMock常用方法
- C++调用外部应用程序的方法的整理总结(常用)
- C++单元测试二:何时Mock及其是与非
- C++开发中一个解决方案里,两个项目的相互引用,相互依赖的实现方法(解决方法)
- c++中调用python脚本提示 error LNK2001: 无法解析的外部符号 __imp_Py_Initialize等错误的解决方法
- C++ 工程实践(6):单元测试如何 mock 系统调用
- 【PHP】PHPUnit单元测试利器:PHP Mock的使用方法
- android 依赖外部库的编译方法
- 单元测试笔记,静态方法的测试和Mock
- C/C++项目调用外部exe程序方法