您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > cppUnit
用CPPUnit做单元测试
作者:网络转载 发布时间:[ 2013/3/4 16:11:41 ] 推荐标签:

通过这样一个简单的Test Case测试了4个可能存在的错误:
 load函数返回值
 getData函数返回值
 number结构的成员值
 string结构的成员值
 
storeTest要复杂一些,因为需要把fixture中的数据存储到临时文件中,之后打开两个文件(新的临时文件和外部文件),读出数据并比照内容。代码如下:

void DiskDataTestCase::storeTest()
{
    DATA    d;
    DWORD   tmpSize, auxSize;
    BYTE    *tmpBuff, *auxBuff;
    TCHAR   absoluteFilename[MAX_PATH];
    DWORD   size = MAX_PATH;

    // 填充结构体
    d.number = FILE_NUMBER;
    strcpy(d.string, FILE_STRING);

    // 相对路径转化为路径

    strcpy(absoluteFilename, AUX_FILENAME);
    CPPUNIT_ASSERT( RelativeToAbsolutePath(absoluteFilename, &size) );

    // 执行操作
    fixture->setData(&d);
    CPPUNIT_ASSERT( fixture->store("data.tmp") );

    // 读出两文件的内容并对比
    // ReadAllFileInMemory 是一个分配缓冲区的外部函数
    // 把文件内容存入其中. 调用函数负责释放缓冲区.
    tmpSize = ReadAllFileInMemory("data.tmp", tmpBuff);
    auxSize = ReadAllFileInMemory(absoluteFilename, auxBuff);

    // 文件不存在则抛出异常
    CPPUNIT_ASSERT_MESSAGE("New file doesn't exists?", tmpSize > 0);
    CPPUNIT_ASSERT_MESSAGE("Aux file doesn't exists?", auxSize > 0);

    // 文件大小可获得,否则抛出异常
    CPPUNIT_ASSERT(tmpSize != 0xFFFFFFFF);
    CPPUNIT_ASSERT(auxSize != 0xFFFFFFFF);

    // 缓冲区必须可用,否则抛出异常
    CPPUNIT_ASSERT(tmpBuff != NULL);
    CPPUNIT_ASSERT(auxBuff != NULL);

    // 两个文件的大小必须和DATA一致
    CPPUNIT_ASSERT_EQUAL((DWORD) sizeof(DATA), tmpSize);
    CPPUNIT_ASSERT_EQUAL(auxSize, tmpSize);

    // 两文件的内容必须一致
    CPPUNIT_ASSERT( 0 == memcmp(tmpBuff, auxBuff, sizeof(DATA)) );

    delete [] tmpBuff;
    delete [] auxBuff;

    ::DeleteFile("data.tmp");
}

启动用户界面
后,看看如何显示基于MFC的用户界面对话框(事先在其内部编译了TestRunner.dll)。

打开实现类的文件(ProjectNameApp.cpp),把下列代码复制到InitInstance方法中:
#include <cppunit/ui/mfc/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>

BOOL CMy_TestsApp::InitInstance()
{
    ....

    // 声明Test Runner,用以注册的测试填入其中,并运行
    CppUnit::MfcUi::TestRunner runner;

    runner.addTest( CppUnit::TestFactoryRegistry::getRegistry().makeTest() );

    runner.run();   

    return TRUE;
}
 
很简单,不是吗?只需要定义一个"runner"实例,添加注册过的test(test是通过CPP文件中的CPPUNIT_TEST_SUITE_REGISTRATION宏注册的),可以运行run函数了。

上一页1234下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd