zoukankan      html  css  js  c++  java
  • cppunit小记

    cppunit的代码还是比较容易读的,比看文档还要省事一些。

    拣主要的说一下:

    1. Test和TestSuite

    这个关系有点像composite模式,如图

    TestAndSuite

    当然除了TestSuite外,Test还有其它的子类,比如TestCase等

    2.TestResult和TestRunner和Test

    TestRunnder组织起Test(/TestSuite),之后run时,实际将所有Test交给TestResult执行,TestResult一一执行每个Test,在每个Test运行时会通知注册在TestResult上的TestListener。

    3. TestFixture\TestCaller等

    TestCaller名为Caller,实为TestCase(子类)。

    为方便用户写case而设计了TestFixture,用户可通过继承TestFixture在其中写自己的case,而TestCaller实际使用TestFixture完成回调(也是被称为Caller的原因)形成了TestCase。

    4.宏们

     CPPUNIT_TEST_SUITE
     CPPUNIT_TEST
     CPPUNIT_TEST_SUITE_END

    这几个宏在用户所写Fixture中插入代码,加入必要的函数,及添加case并形成Fixture被Caller调用形成Test的代码,于是每一个被CPPUNIT_TEST的函数都成了一个Test。

    CPPUNIT_TEST_SUITE_NAMED_REGISTRATION

    形成一个static的Registry,其中加入了参数所指的Fixture.之后可通过registry的名字将它找到,并使用makeTest找出其中包含(并组织后的)Test们。

    示例代码: 参考:http://www.ibm.com/developerworks/cn/linux/l-cppunit/的第4部分。

    
    /// MathTest.h
    // A TestFixture subclass.
    // Announce: use as your owner risk.
    // Author  : liqun (liqun@nsfocus.com)
    // Data    : 2003-7-5
    #include "cppunit/extensions/HelperMacros.h"
    class MathTest : public CppUnit::TestFixture {
      // 声明一个TestSuite
      CPPUNIT_TEST_SUITE( MathTest );
      // 添加测试用例到TestSuite, 定义新的测试用例需要在这儿声明一下
      CPPUNIT_TEST( testAdd );
      // TestSuite声明完成
      CPPUNIT_TEST_SUITE_END();
      // 其余不变
    protected:
      int m_value1, m_value2;
      
    public:
      MathTest() {}
      
      // 初始化函数
      void setUp ();
      // 清理函数
      void tearDown();
      
      // 测试加法的测试函数
      void testAdd ();
      // 可以添加新的测试函数
    };
    /// MathTest.cpp
    // A TestFixture subclass.
    // Announce: use as your owner risk.
    // Author  : liqun (liqun@nsfocus.com)
    // Data    : 2003-7-5
    #include "MathTest.h"
    // 把这个TestSuite注册到名字为"alltest"的TestSuite中, 如果没有定义会自动定义
    // 也可以CPPUNIT_TEST_SUITE_REGISTRATION( MathTest );注册到全局的一个未命名的TestSuite中.
    CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( MathTest, "alltest" );
    // 下面不变
    void MathTest::setUp()
    {
         m_value1 = 2;
         m_value2 = 3;
    }
    void MathTest::tearDown()
    {
    }
    void MathTest::testAdd()
    {
         int result = m_value1 + m_value2;
         CPPUNIT_ASSERT( result == 5 );
    }
    /// main.cpp
    // Main file for cppunit test.
    // Announce: use as your owner risk.
    // Compile : g++ -lcppunit MathTest.cpp main.cpp
    // Run     : ./a.out
    // Test    : RedHat 8.0 CppUnit1.8.0
    // Author  : liqun ( a litthle modification. liqun@nsfocus.com)
    // Data    : 2003-7-5
    // 不用再包含所有TestFixture子类的头文件
    #include <cppunit/extensions/TestFactoryRegistry.h>
    #include <cppunit/ui/text/TestRunner.h>
    // 如果不更改TestSuite, 本文件后期不需要更改. 
    int main()
    {
      CppUnit::TextUi::TestRunner runner;
      
      // 从注册的TestSuite中获取特定的TestSuite, 没有参数获取未命名的TestSuite.
      CppUnit::TestFactoryRegistry &registry = 
          CppUnit::TestFactoryRegistry::getRegistry("alltest");
      // 添加这个TestSuite到TestRunner中
      runner.addTest( registry.makeTest() );
      // 运行测试
      runner.run();
    }
    
    
  • 相关阅读:
    2020年12月学习记录
    Data Protection Application Programming Interface滥用攻击
    另类的缓存凭证收集
    js获取地址栏参数,携带参数跳转页面
    用JS获取地址栏参数的方法
    解决vue加载时闪烁
    vue-cli-service build 不同环境配置
    vite创建vue3.x项目报404的解决方案
    后端开发完接口才给出接口文档,合理吗?
    API研发实现规范化管理的价值
  • 原文地址:https://www.cnblogs.com/justin_s/p/2299984.html
Copyright © 2011-2022 走看看