CppUnit与单元测试

Violet ·
更新时间:2024-09-21
· 604 次阅读

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(); }

 



单元 cppunit 单元测试 测试

需要 登录 后方可回复, 如果你还没有账号请 注册新账号
相关文章