现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

CppUnit体验:安装 配置与编码测试

2012-06-22 22:00 工业·编程 ⁄ 共 2921字 ⁄ 字号 评论 1 条

随着业务的扩展,特别是安全客户端的全面上线,CppUnit测试变得越来越重要。

一、获取cppunit源代码

    使用svn进行checkout,地址

1.首先运行VS2008(或者VS2005),导入该项目,路径如图:

2.转换

3.删除无用的dspplugin工程。

4.编译解决方案

编译整个解决方案,如果编译出错,则是因为编译器版本错误。

因为vc6为 7.0版本,vs2005为8.0,vs2008为 9.0,因此修改MsDevCallerListCtrl.cpp代码中67行为:

然后选择Release版本进行编译

编译完成以后, 在cppunit根目录/lib/目录下,会生成若干lib,和dll文件, 都以cppunit开头. cppunitd表示debug版, cppunit表示release版。CppUnit为我们提供了两套框架库,一个为静态的lib,一个为动态的dll。其中项目cppunit为静态库,cppunit_dll为动态库,生成的库文件为:

cppunit.lib:静态库release版;

cppunitd.lib:静态库debug版;

cppunit_dll.lib:动态库release版;

cppunitd_dll.lib:动态库debug版;

基于静态库与动态库的主要区别为:1.涉及到内存的使用。2.静态库编译时使用,动态库运行时使用。

至此,我们就有了执行CPPUINT所需要的文件(.lib文件),剩下的事情,就是将这些文件运用到被测试的工程中去。

二、环境配置

环境配置如下操作:

1.在VS2008中点击 工具——选项——弹出的框中点击“项目和解决方案”边的+号——VC++目录——右侧“显示以下内容的目录”中选择“可执行文件”,添加 本机cppunit根目录lib

2.在“包含文件”中,添加 本机cppunit根目录include

3.同样,在库文件中,添加 本机cppunit根目录lib

三、新建测试项目

在VS2008中新建一个工程作为测试项目,在测试工程中也有一些需要配置的地方:右击测试项目,点击“属性”

在弹出的窗口中,依次点击“链接器”——输入——在最上方“配置”中,选择Debug,在右侧“附加依赖项”中加入: cppunit根目录libcppunitd.lib

然后,选择Release,在右侧“附加依赖项”中加入: cppunit根目录libcppunit.lib

至此,项目环境配置完成。

四、编码

CPPuint提供了与junit类似的单元测试框架,需要的代码如下:

1.头文件:DiskDataTestCase.h

#if !defined(DISKDATA_TESTCASE_H_INCLUDED)

#define DISKDATA_TESTCASE_H_INCLUDED

#if _MSC_VER > 1000

#pragma once

#endif // _MSC_VER > 1000

#include <cppunit/TestCase.h> //为了从基类TestCase派生新的测试类

#include <cppunit/extensions/HelperMacros.h> //方便快速定义测试类的宏

#include “DiskData.h” //被测试类的头文件,根据实际情况更改

class DiskDataTestCase : public CppUnit::TestCase

{

CPPUNIT_TEST_SUITE(DiskDataTestCase);//定义Test Suite的起点

CPPUNIT_TEST(loadTest);//定义Test Case,只有被CPPUNIT_TEST宏定义的函数,才会被当做测试用例运行

CPPUNIT_TEST(storeTest);

CPPUNIT_TEST_SUITE_END();//定义Test Suite的终点

public:

void setUp(); //在每个测试用例运行之前都会运行一次,主要进行数据库连接、初始化类等工作

void tearDown(); //每个测试用例运行之后运行一次,进行对象析构等工作

protected:

void loadTest(); //CPPUNIT_TEST()宏定义中类的实现

void storeTest(); //CPPUNIT_TEST()宏定义中类的实现

private:

DiskData *fixture; //被测试类指针

};

接下来,只要实现CPPUNIT_TEST()宏定义中的类就好。在本例中,就是loadTest() 和 storeTest()这两个方法。

2.cpp文件:

#include “DiskDataTestCase.h”

CPPUNIT_TEST_SUITE_REGISTRATION(DiskDataTestCase); //添加注册过的test

void DiskDataTestCase::setUp()

{

fixture = new DiskData();

}

void DiskDataTestCase::tearDown()

{

delete fixture;

fixture = NULL;

}

void DiskDataTestCase::loadTest()

{

// our load test logic

}

void DiskDataTestCase::storeTest()

{

// our store test logic

}

3.mian函数

#include <cppunit/ui/mfc/TestRunner.h>

#include <cppunit/extensions/TestFactoryRegistry.h>

BOOL CMy_TestsApp::InitInstance()

{

….

// 声明Test Runner,用以注册的测试填入其中,并运行

CppUnit::MfcUi::TestRunner runner; //MFC界面方式

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

runner.run();

return TRUE;

}

这样,一套完整的cppunit配置就完成了,点击运行,就可以看到运行界面。

文中具体代码见:用CPPUnit做单元测试

五、assert

CPPUNIT_ASSERT是一个宏,判断后面的参数是否正确,CPPUNIT还有很多宏,如

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时失败

目前有 1 条留言    访客:0 条, 博主:0 条 ,引用: 1 条

    外部的引用: 1 条

    • CppUnit的概念、原理与安装使用 « 求索阁

    给我留言

    留言无头像?