科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件CppUnit与单元测试

CppUnit与单元测试

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

cppunit是一个测试程序框架。cpp指的是该测试程序用c++写的,unit取“单元”测试的意思。

作者:许式伟 来源:CSDN 2008年1月14日

关键字: 单元测试 CppUnit Linux

  • 评论
  • 分享微博
  • 分享邮件

cppunit是什么?

cppunit是一个测试程序框架。cpp指的是该测试程序用c++写的,unit取“单元”测试的意思。
最初出现该测试框架是java版本的,名为junit。

为什么要用cppunit?

cppunit规范了单元测试的一些思想。这些思想朴素但非常重要。cppunit的测试观念主要有:

  • 测试的结果是程序直接监测的,而不是“通过人眼对屏幕上的输出结果的观测”。
    因此,cppunit并不推荐屏幕输出,或者写可视化的测试单元。
     
  • 测试的过程是自动化的,不需要人工的干预。
    cppunit推荐用大量典型测试数据进行回归的方式。
     
  • 测试案例是安全可控的。
    如果一个测试案例错误或者发生了异常,那么应该记录这个错误,并且去执行下一个案例,而不应该停下来。cppunit测试框架保证了这一点。
     
  • 单元测试是频繁发生的,每天都进行。
    由于测试案例的自动化,故此,在你的模块发生了重要改变时(特别是设计上的重大变化/重构时),你都应该马上运行一遍所有的测试程序,以确认你的代码没有引入预期(或曾经出现过)的bug。你可以在准备吃饭的时候,启动单元测试程序进行回归。
     
  • 单元测试的目的是产生高质量的单元(模块)。从而减少系统集成(包括系统集成测试)的代价。

cppunit使用样例

class TestBSTR : public TestCase
{
public:
    CPPUNIT_TEST_SUITE(TestBSTR);
        CPPUNIT_TEST(test_allocString);
        CPPUNIT_TEST(test_allocStringWithLen);
        CPPUNIT_TEST(test_allocChinese);
    CPPUNIT_TEST_SUITE_END();

public:
    
void test_allocString()
    {
        BSTR p;
        WCHAR szHello[] 
= L"Hello, world!";

        p 
= SysAllocString(szHello);
        CPPUNIT_ASSERT( wcscmp(p, szHello) 
== 0 );
        CPPUNIT_ASSERT( SysStringLen(p) 
== wcslen(szHello) );

        SysReAllocString(
&p, szHello);
        CPPUNIT_ASSERT( wcscmp(p, szHello) 
== 0 );

        SysFreeString(p);
    }

    
void test_allocStringWithLen()
    {
        BSTR p;

        p 
= SysAllocStringLen(L"ABCDEFGH"4);
        CPPUNIT_ASSERT( wcscmp(p, L
"ABCD"== 0 );

        SysReAllocStringLen(
&p, L"XYZ"2);
        CPPUNIT_ASSERT( wcscmp(p, L
"XY"== 0 );
        CPPUNIT_ASSERT( SysStringLen(p) 
== 2 );

        SysFreeString(p);

        SysAllocString(L
"Memory leak checker");
    }

    
void test_allocChinese()
    {
        BSTR p 
= SysAllocString(L"中文!");
        CPPUNIT_ASSERT( SysStringLen(p) 
== 3 );
        CPPUNIT_ASSERT( wcscmp(p, L
"中文!"== 0 );
        SysFreeString(p);
    }
};

CPPUNIT_TEST_SUITE_REGISTRATION(TestBSTR);
// 使用CPPUNIT_TEST_SUITE_REGISTRATION辅助宏注册测试类  

int main()
{
    TestApp app;
    
return 0;
}

这里TestApp是我自己写的辅助类。CppUnit标准的main函数大概如下:

int main()
{
    CPPUNIT_NS::Test 
*suite = CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest();
    CPPUNIT_NS::TextUi::TestRunner runner;
    runner.addTest( suite );
    
    CPPUNIT_NS::Outputter
* outputter;
    outputter 
= new CPPUNIT_NS::CompilerOutputter(&runner.result(), std::cerr);
    runner.setOutputter(outputter);
    
    
return runner.run();
}

 

查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章