测试(1): 极简单元测试

示例说明:

以除法为例子做一个C的极简单元测试示例,请大家学习,tiny_unit_test.h可直接拿去用。
本次作业的功能是calc,不是div,此处拿div做例子,只是为了给大家一个最基本的单元测试示例。
Java和C#的同学们请使用那些语言的Assert之类的,例如参考这个:http://www.cnblogs.com/greyzeng/p/4439080.html

单元测试工具

每一种语言都有对应的做单元测试的框架和工具,此处写一个最简单单元测试工具宏tiny_unit_test.h,用以帮助理解

#ifndef __TINY_UNIT_TEST_H__
#define __TINY_UNIT_TEST_H__
#define FAIL() printf("\nfailure in %s() line %d\n", __FUNCTION__, __LINE__)
#define tut_assert(test) do { if (!(test)) { FAIL(); return 1; }} while(0)
#endif

编写核心计算模块API

除法API头文件:div.h

#ifndef __DIV_H__
#define __DIV_H__
#include <stdio.h>
#include <stdlib.h>
#define RESULT_SUCCESS 0
#define RESULT_FAILED  1 

// 除法计算
// 如果计算成功,使用r返回计算结果,否则不改变r的指
// 如果计算正常,则返回RESULT_SUCCESS
// 如果出现b为0,则返回RESULT_FAILED
// 如果除不尽,则返回RESULT_FAILED
int div(int a,int b, int* r);

#endif

除法API实现:div.cpp

#include "div.h"
int div(int a,int b, int* r)
{
	if(b==0)
	{
		return RESULT_FAILED;
	}
	int rem = a%b;
	if(rem!=0)
	{
		return RESULT_FAILED;
	}
	*r = a/b;
	return RESULT_SUCCESS;
}

使用单元测试工具对API测试

使用tiny_unit_test.h的测试宏为除法API做单元测试:test_div.cpp

#include <stdio.h>
#include <stdlib.h>
#include "tiny_unit_test.h"
#include "div.h"

int test_div()
{
	int result=0;
	int ret=RESULT_FAILED;

	printf("->测试相同的数相除\n");
	ret = div(-100,-100,&result);
	tut_assert(ret==RESULT_SUCCESS);
	tut_assert(result==1);
	
	printf("->测试0除任何数\n");
	ret = div(0,1,&result);
	tut_assert(ret==RESULT_SUCCESS);
	tut_assert(result==0);

	printf("->测试被除数为0\n");
	ret = div(20,0,&result);
	tut_assert(ret==RESULT_FAILED);

	printf("->测试除不尽的情况\n");
	ret = div(10,7,&result);
	tut_assert(ret==RESULT_FAILED);
	
	//下面的语句将触发单元测试失败
	tut_assert(result==1);
	return 0;
}

// 本文件只做单元测试程序
// 用以测试目标API,此处指div
// 应用程序请另写
int main(int argc,char** argv)
{
	if(test_div()==0)
	{
		printf("成功,除法单元测试通过。");
	}
	else
	{
		printf("错误,除法单元测试未通过。");
	}
	system("pause");

	return 0;
}

编译,并运行单元测试程序(注意,应用程序请另外写,单元测试程序只是用来做API的测试)

posted @ 2017-03-04 14:12  ffl  阅读(891)  评论(0编辑  收藏  举报