搭建CxxTest单元测试框架

CxxTest简介

CxxTest软件框架提供了一套代码框架和代码生成工具。

测试人员需要使用C++头文件定义测试用例。在测试用例中,通过定义测试方法,来打包需要的测试项目。测试方法中可以调用开发人员编写的函数,类,变量,声明等,来实现对这些函数,类,变量,声明进行测试和验证。

测试函数中需要使用CxxTest提供的断言宏,来测试比较结果。这些结果如果非预期,会被作为失败或者异常,被CxxTest记录下来。从而实现单元测试自动化。

cxxtestgen工具

运行测试程序

集成到makefile框架

一般大型项目,往往都用户多个可执行程序,多个库文件,以提供丰富稳定可维护的应用功能。C++代码一般使用Makefile来管理。通过定义通用的Makefile宏和变量,将

以下就是基于现有项目makefile框架增加和设计的cxxtest引入方式。

增加测试用例目录及文件列表

在每个模块目录下增加test目录,用于存放测试用例文件。

建议测试用例头文件使用扩展名.hxx。自动生成的文件扩展名为.cxx。开发人员使用的头文件.hpp,源文件.cpp。

这样规范的好处是使用git等版本管理时,可以区分出文件类型。同时设置ignore文件。

在Makefile文件中定义TESTS变量,包含测试用例文件名,定义TEST_SRCS变量,包含依赖的源文件名(不含扩展名)。

事实上我一般是定义SRCS包含源文件名。这样只需要

TEST_SRCS = $SRCS就可以避免重复定义列表了。

为什么不直接用SRCS呢,因为TEST_SRCS中不能含main函数的实现。

采用part模式

最后生产可执行

自动执行

可执行程序以test_开头,后面跟模块名,可以是库名,可以是可执行程序名。

可执行程序使用-v开关,可以显示测试用例中的跟踪调试日志信息。

测试用例编写的考量

#ifndef TEST_LIGHT_TRIGGER_HXX_
#define TEST_LIGHT_TRIGGER_HXX_

#include "light_trigger.hpp"
#include <dm/datetime.hpp>
#include <cxxtest/TestSuite.h>

class TestLightTrigger:public CxxTest::TestSuite{
public:
	void testNextTime(){
		dm::CDateTime dt;
		dt.setYear(2020);
		dt.setMonth(2);
		dt.setDay(3);
		dt.setHour(12);
		dt.setMinute(24);
		dt.setSec(36);

		dm::CTimeStamp now = dt.toTimeStamp();
		dm::CTimeStamp next;

		znjt::CLightTrigger tg;

		TS_TRACE("\u9ed8\u8ba4\u503c");
		TSM_ASSERT_EQUALS("\u7c7b\u578b",tg.getType(),tg.TNone);
		TSM_ASSERT_EQUALS("\u65f6\u95f4",tg.getSecs(),0);
		TSM_ASSERT("\u662f\u5426\u56fa\u5b9a\u65f6\u523b",!tg.isFixed());
		TSM_ASSERT_EQUALS("\u4e0b\u6b21\u65f6\u523b",tg.nextTime(now),now);

		TS_TRACE("\u79d2\u6a21\u5f0f");
		tg.setType(tg.TSecs);
		tg.setSecs(1);

		next = now;
		next.addSec(1);

		TSM_ASSERT("\u662f\u5426\u56fa\u5b9a\u65f6\u523b",!tg.isFixed());
		TSM_ASSERT_EQUALS("\u4e0b\u6b21\u65f6\u523b",tg.nextTime(now),next);

		TS_TRACE("\u5206\u949f\u6a21\u5f0f");
		tg.setType(tg.TByMin);
		tg.setSecs(10);

		TSM_ASSERT("\u662f\u5426\u56fa\u5b9a\u65f6\u523b",tg.isFixed());
		TSM_ASSERT_EQUALS("\u4e0b\u6b21\u65f6\u523b",tg.nextTime(now),next);
	}
};

#endif /* TEST_LIGHT_TRIGGER_HXX_ */

对项目文件的依赖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章