一、前言
上一篇我们分析了gtest的一些内部实现,总的来说整体的流程并不复杂。本篇我们就尝试编写一个精简版本的C++单元测试框架:nancytest ,通过编写这个简单的测试框架,将有助于我们理解gtest。
二、整体设计
使用最精简的设计,我们就用两个类,够简单吧:
1. TestCase类
包含单个测试案例的信息。
2. UnitTest类
负责所有测试案例的执行,管理。
三、TestCase类
TestCase类包含一个测试案例的基本信息,包括:测试案例名称,测试案例执行结果,同时还提供了测试案例执行的方法。我们编写的测试案例都继承自TestCase类。
class
TestCase
{
public :
TestCase( const char * case_name) : testcase_name(case_name){}
// 执行测试案例的方法
virtual void Run() = 0 ;
int nTestResult; // 测试案例的执行结果
const char * testcase_name; // 测试案例名称
};
{
public :
TestCase( const char * case_name) : testcase_name(case_name){}
// 执行测试案例的方法
virtual void Run() = 0 ;
int nTestResult; // 测试案例的执行结果
const char * testcase_name; // 测试案例名称
};
四、UnitTest类
我们的UnitTest类和gtest的一样,是一个单件。我们的UnitTest类的逻辑非常简单:
1. 整个进程空间保存一个UnitTest 的单例。
2. 通过RegisterTestCase()将测试案例添加到测试案例集合testcases_中。
3. 执行测试案例时,调用UnitTest::Run(),遍历测试案例集合testcases_,调用案例的Run()方法
class
UnitTest
{
public :
// 获取单例
static UnitTest * GetInstance();
// 注册测试案例
TestCase * RegisterTestCase(TestCase * testcase);
{
public :
// 获取单例
static UnitTest * GetInstance();
// 注册测试案例
TestCase * RegisterTestCase(TestCase * testcase);