本博客(http://blog.csdn.net/livelylittlefish )贴出作者(三二一@小鱼)相关研究、学习内容所做的笔记,欢迎广大朋友指正!
Content
0. 序言
1. 本文议题
2. 应该做什么?
3. 如何做?
3.1 方案一
(1) 建立模拟文件
(2) 修改业务逻辑中的调用
(3) 修改make文件
(4) 讨论
3.2 方案二
(1) 建立模拟文件
(2) 基本思想
(3) 修改make文件
(4) 讨论
(5) 该方案的变种
4. 小结
0. 序言
在软件开发中,我们不可避免的要调用一些外部或者系统级别的接口,然而,我们在测试时,也许这些接口或环境并不存在。比如在对我们自己的模块做单元测试时,发现自己的模块依赖的别的模块或接口还没有建立好,如何测试?
Mock概念应运而生,最开始在Java领域,后来各种语言或开发领域均引入该概念。
Mock实际上就是一种模拟和控制外部或者系统级别对象或接口的方法。因此,我们在做测试时,尤其是单元测试或覆盖测试时,不必与真实环境交互即可完成对自己的模块业务逻辑的测试,或许自己的模块需要依赖外部环境。
因此,我们可以总结
Mock的本质是:模拟(mock)你的(代码),来测我的(代码)。
在这里,别人的(代码),或者与硬件相关的(代码),或者暂时未完成的(代码),统称为你的(代码)。
关于单元测试,各种软件工程书籍,http://en.wikipedia.org/wiki/Unit_testing,及其链接有较详细的解释。
关于Mock对象,可参考《测试驱动开发-Test-Driven Development》第7章笔记,http://www.mockobjects.com,http://en.wikipedia.org/wiki/Mock_object,等有较详细的解释。
1. 本文议题
在本文中,笔者将以文件操作为例,讲述基本的mock概念和方法。本例中,你的代码your_file.h/.c如下。
/*
* your_file.h
*/
#ifndef _YOUR_FILE_H_
#define _YOUR_FILE_H_
#include
FILE* your_file_open(char *fname);
void your_file_close(FILE* fp);
#endif
Your_file.c是你的代码本来应该有的功能,如打开和关闭文件。
/*
* your_file.c
*/
#include "your_file.h"
FILE* your_file_open(char *fname)
{
FILE *fp = NULL;
fp = fopen(fname, "r");
if (fp == NULL)
{
printf("Fail to open file!/n");
return 0;
}
printf("Succeed!/n");
return fp;
}
void your_file_close(FILE* fp)
{
fclose(fp);
}
首先,做如下假设:
(1) 由于某种原因,这个.c文件(your_file.c)还有问题;
(2) 或者,这个