gtest框架原理的简单实现如下:
//测试案例,里面可能包含很多项不同的测试
class TestCase
{
public:
TestCase(const char* name) :_testCaseName(name) {};
virtual void run() = 0;
int _testResult; //当测试案例不全通过时,此项值为0
const char* _testCaseName; //测试案例名
};
//管理测试案例队列类,单例
class TestCaseManager
{
public:
static TestCaseManager* getInstance()
{
static TestCaseManager a;
return &a;
};
//逐个运行测试案例,并输出结果
int run()
{
_allCount = _testCaseVector.size();
_successCount = 0;
for (std::vector<TestCase*>::iterator i = _testCaseVector.begin(); i != _testCaseVector.end(); ++i)
{
_currentTestCase = *i;
_currentTestCase->_testResult = 1;
std::cout << std::endl << "[-----------------RUN-----------------]" << std::endl;
std::cout << "run testcase: " << _currentTestCase->_testCaseName << std::endl;
_currentTestCase->run(); //执行该测试案例的run方法
if (_currentTestCase->_testResult) //若测试案例成功通过
{
_successCount++;
std::cout << "success!" << std::endl;
}
std::cout << "end testcase: " << _currentTestCase->_testCaseName << std::endl;
}
std::cout << "--------------