CppUnit 测试类注册过程
来源:互联网 发布:驾校发展数据 编辑:程序博客网 时间:2024/05/16 01:31
--------------------------------------------------------------------------------------
1. 实现一个最简单的测试类
--------------------------------------------------------------------------------------
可以看到整个过程如下:
1. 从 CPPUNIT_NS::TestFixture 派生
2. 注册该类 CPPUNIT_TEST_SUITE_REGISTRATION (UT_MyTest);
3. 实现 setUp 和 tearDown (如果需要)
4. 添加测试函数 UT_FormatString
CPPUNIT_TEST_SUITE(UT_MyTest);
CPPUNIT_TEST(UT_FormatString);
CPPUNIT_TEST_SUITE_END();
5. 实现测试函数 UT_FormatString
--------------------------------------------------------------------------------------
2. 注册测试类
--------------------------------------------------------------------------------------
先看看注册测试类,也就是 CPPUNIT_TEST_SUITE_REGISTRATION (UT_MyTest); 后面干了什么
#define CPPUNIT_TEST_SUITE_REGISTRATION( ATestFixtureType ) /
static CPPUNIT_NS::AutoRegisterSuite< ATestFixtureType > /
CPPUNIT_MAKE_UNIQUE_NAME(autoRegisterRegistry__ )
这里也就是相当于定义了一个全局静态变量
static CPPUNIT_NS::AutoRegisterSuite< UT_MyTest > autoRegisterRegistry__75; (75代表当前的代码行数)
这里利用了C++的几个特性
1) 定义一个 static 全局变量,只在本文件内可见,避免了后面的 autoRegisterRegistry__75 变量名重名。
事实上,如果你在几个cpp文件中 include 这个头文件,会发现 UT_MyTest 内的测试函数会被调用多次
2) 全局变量会在 main 函数调用之前构造,也就是 CPPUNIT_NS::AutoRegisterSuite 的构造函数会被先调用
这样我们可以看到注册过程就是在 CPPUNIT_NS::AutoRegisterSuite 的构造函数中实现的 :
这里 m_registry->registerFactory( &m_factory ); 的实现就先不去关注了。
看看这里又定义了一个类 TestSuiteFactory<UT_MyTest>
也就是最终生成测试实例时,还是调用的 UT_MyTest::suite()
--------------------------------------------------------------------------------------
3. 添加测试用例
--------------------------------------------------------------------------------------
在我们的测试类 UT_MyTest 什么时候实现了 suite() ?
嗯,这里还有三个宏:
CPPUNIT_TEST_SUITE(UT_MyTest);
CPPUNIT_TEST(UT_FormatString);
CPPUNIT_TEST_SUITE_END();
把它们展开并进行简化后,就是这样的:
也就是 suite 的实现隐藏在
CPPUNIT_TEST_SUITE(UT_MyTest);
CPPUNIT_TEST(UT_FormatString);
CPPUNIT_TEST_SUITE_END();
这三个宏中间。
要读懂这一大段代码,必须分析理解一下 CppUnit 中的一些术语或概念
CppUnit 中有一个基类定义所有的测试
class CPPUNIT_API Test
从这里派生了一系列类
Test
|--------------------|
TestLeaf TestComposite
| |
TestCase TestSuite
|
TestCaller
可以看到往下有了两个分支
TestLeaf,TestCase,TestCaller 这一族代表了一个具体的测试用例,比如 UT_MyTest::UT_FormatString,
它从事具体的测试工作
TestComposite 和 TestSuite 则更像一个容器,包含了一系列的测试用例 (TestCase 或 TestCaller)。
所以可见 UT_MyTest::suite() 的实现基本就是创建一个 TestSuite,然后往里面添加一系列的 TestCaller。
其中 suite() 就是创建这个 TestSuite,
而 addTestsToSuite 则往里面添加 TestCaller
这些 TestCaller 就是包含在 CPPUNIT_TEST (...) 中的测试函数了
- CppUnit 测试类注册过程
- 测试 Cppunit
- 我看CPPUNIT的测试类
- CppUnit测试框架入门
- CppUnit测试框架入门
- CppUnit测试框架入门
- CppUnit测试框架入门
- CppUnit测试框架入门
- CppUnit测试框架入门
- CppUnit测试框架入门
- 配置CppUnit测试环境
- CppUnit测试框架入门
- CppUnit测试框架入门
- cppunit测试工具
- CPPUnit 测试宏
- CppUnit测试框架入门
- 学习CppUnit测试框架
- CppUnit测试框架入门
- C#异步调用
- 如何熟练操纵复杂的SEO技术
- Java引用数据类型
- 女友跟人跑了,网友安慰楼主竟成如此
- 《GWT揭秘》连载1/3
- CppUnit 测试类注册过程
- convert sql
- 各种连接池的比较
- 折腾了宝贵的3小时,备忘一下
- Java中String与byte[]的转换
- 如何配置允许远程连接SQL Server 2005
- 百度SEO关键词排名怪现象之我见
- 系统集成项目管理工程师报名啦。
- 10 Pretty Linux Commands