一、前言
上一篇我们分析了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; // 测试案例名称 }; |
四、UnitTest类
我们的UnitTest类和gtest的一样,是一个单件。我们的UnitTest类的逻辑非常简单:
1. 整个进程空间保存一个UnitTest 的单例。
2. 通过RegisterTestCase()将测试案例添加到测试案例集合testcases_中。
3. 执行测试案例时,调用UnitTest::Run(),遍历测试案例集合testcases_,调用案例的Run()方法。
class UnitTest { public: // 获取单例 static UnitTest* GetInstance(); // 注册测试案例 TestCase* RegisterTestCase(TestCase* testcase); // 执行单元测试 int Run(); TestCase* CurrentTestCase; // 记录当前执行的测试案例 int nTestResult; // 总的执行结果 int nPassed; // 通过案例数 int nFailed; // 失败案例数 protected: std::vector<TestCase*> testcases_; // 案例集合 }; |