CppUnit的原理

注:以下内容是课程的教学资料,非本人作品,与大家分享和记录。


1、 在 CppUnit 中,一个或一组测试用例的测试对象被称为Fixture。Fixture 就是被测试的目标,可能是一个对象或者一组相关的对象,甚至一个函数。


2、通常写一个 TestCase 的步骤包括:
           ① 初始化操作,比如:生成一组被测试的对象,初始化值;
           ② 按照要测试的某个功能或者某个流程对 fixture 进行操作;
           ③ 验证结果是否正确;
           ④ 清理工作,比如对 fixture 的及其他的资源进行释放等。

      对 fixture 的多个测试用例,通常(1)、(4)部分代码都是相似的,CppUnit在很多地方引入了setUp和tearDown虚函数。可以在 setUp 函数里完成(1)初始化代码,而在 tearDown 函数中完成(4)代码。具体测试用例函数中只需要完成(2)、(3)部分代码即可,运行时 CppUnit 会自动为每个测试用例函数运行 setUp,之后运行 tearDown,这样测试用例之间就没有交叉影响。


      对 fixture 的所有测试用例可以被封装在一个CppUnit::TestFixture 的子类(命名惯例是[ClassName]Test)中。然后定义这个fixture 的 setUp 和 tearDown 函数,为每个测试用例定义一个测试函数(命名惯例是 testXXX)。

class MathTest : public CppUnit::TestFixture {
         protected:
                int m_value1, m_value2;
        public:

        MathTest() {}
        // 步骤(1)初始化函数
        void setUp () {
                m_value1 = 2;
                m_value2 = 3;
        }

        // 测试加法的测试函数
        void testAdd () {
                // 步骤(2)对 fixture 进行操作
                int result = m_value1 + m_value2;

                // 步骤(3)验证结果是否争取
                CPPUNIT_ASSERT( result == 5 );
        }

        // 步骤(4)没有什么清理工作
        tearDown. void teardown () { }
}


3、提供的部分断言宏

   • CPPUNIT_ASSERT(condition) // 确信condition为真

   •CPPUNIT_ASSERT_MESSAGE(message, condition) // 当condition为假时失败, 并打印message

   •CPPUNIT_FAIL(message)  // 当前测试失败, 并打印message

   •CPPUNIT_ASSERT_EQUAL(expected, actual)  // 确信两者相等

   •CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual) // 失败的同时打印message 

   •CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, delta)// 当expected和actual之间差大于delta时失败


4‘被测项目的设置  

   ① 在VC中,在菜单中,选择Project -> Setting -> C/C++ -> Category列表中选择'C++ Language’, 选择'enable Run-Time Type Information (RTTI)'。   

   ② 在VC中,在菜单中,选择Project à Settingsà 'C/C++'à Category列表中选择'Code generation',在Use run-time library列表中,对于Debug版,选择'DebugMultithreaded DLL',对于release版,选择'Multithreaded DLL';   

   ③ 在VC中,在菜单中,选择Project à Settingsà 'Link',在'Object/library modules'中添入需要的lib文件:cppunitX.lib (debug模式为cppunitd.lib, release 模式为cppunit.lib )、testrunnerX.lib(debug模式为testrunnerd.lib, release 模式为testrunner.lib,debug Unicode模式为testrunnerud.lib, releaseUnicode模式为testrunneru.lib)

• 对于可视化方式,需将testrunnerd.dll拷贝至工程目录下(非常重要,TestRunner.dll为我们提供了基于GUI的测试环境。为了让我们的测试程序能正确的调用它 estRunner.dll必须位于你的测试程序的路径下。)


5、框架剖析 核心


                                                                                 CPPUnit Core类图

   1. Test所有测试的基类。

   2. TestSuite表示一系列测试用例的集合,也可以包含其他TestSuite。

   3. TestCase表示一个单一的TestCase。

   4. TestFixture用于初始化和回收测试用例。

   5. TestCaller用于封装一个TestFixture成TestCase。

   6. TestRunner启动测试用例的主程序,可以通过addTest将需要运行的测试用例添加到单元测试程序中。


6、框架剖析 扩展解析

• 工厂类

   TestFactory Test工厂的虚基类

   TestSuiteFactory TestSuite工厂类,用于产生具体的TestSuite

   TestFactoryRegistry该类有两个功能,第一个功能是作为仓库,提供接口让其他模块注册新的TestFactory。第二功能是作为TestFactory,调用注册进去的TestFactory  生Test,并且添加到一个统一的TestSuite中,并返回给调用者。

• 辅助类

   TestSuiteBuilderContextBase该类是扩展中非常重要的一个类,该类用于将某个TestFixture中声明的TestCase添加到该TestFixture对应的TestSuite中。关于该类的作用可以等到解析HelperMacro时再分析。

   TestNamer一个辅助类用于定义以及生成测试的名称。

• 帮助宏

   1. CPPUNIT_TEST_SUITE

   2. CPPUNIT_TEST

   3. CPPUNIT_TEST_SUITE_END

   4. CPPUNIT_TEST_SUITE_REGISTRATION

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值