cppunit在vs2008下使用的环境搭建 1. cppunit在vs2008下使用的环境搭建1.1. 资源获取
Cppunit建议使用较稳定的最近的版本,
l 可以从网上下载:http://sourceforge.net/projects/cppunit/files/cppunit/1.12.1/
l 可以从分享目录下载:\\192.168.150.174\软件\cppunit-1.12.1.tar.gz
vs2008可以从分享目录下载:\\192.168.150.174\软件\vs2008
1.2. 编译cppunit相关及配置vc环境
? 安装vs2008并解压缩cppunit
? 打开..\cppunit-1.12.1\src\CppUnitLibraries.dsw,中途碰到提醒说“转换为当前的 Visual C++ 项目格式”,选择 “全是”
? 分别使用debug和release模式编译cppunit,cppunit_dll,TestRunner三个工程,在..\cppunit-1.12.1\lib目录下能看到以下文件
debug
release
cppunit
cppunitd.lib
cppunit.lib
cppunit_dll
cppunitd_dll.dll
cppunitd_dll.lib
cppunitd_dll.pdb
cppunit_dll.dll
cppunit_dll.lib
TestRunner
destrunnerd.dll
testrunnerd.lib
TestRunner.dll
TestRunner.lib
备注:cppunit和cppunit_dll工程的区别点在于cppunit编译出来的是静态库,cppunit_dll编译出来的是动态库
? 配置vc环境: 工具菜单->选项->项目和解决方案->vc++目录, 将..\cppunit-1.12.1\include加vc的包含文件目录中. 将..\cppunit-1.12.1\lib 加入到vc的库目录中. 然后将 ..\cppunit-1.12.1\lib 路径加入到系统路径中(因为我们的测试程序需要cppunit的dll文件,所以要dll所在路径加入到系统路径(path)变量中, 或者将这些文件拷贝到系统目录中也可以).
1.3. 选择控制台方式搭建第一个工程
由于在CppUnit下, 可以选择控制台方式和UI方式两种表现方案,区别在于前者没有GUI,后者有GUI。我们先选择使用控制台方式的测试环境。
新建c++工程“Win32控制台应用程序”并配置这个工程
? 首先,在工程中打开RTTI开关,具体位置在:工程属性->C/C++->语言,启动运行时类型信息选择“是”。
? 其次,由于CppUnit所用的动态运行期库均为多线程动态库,因此你的单元测试程序也得使用相应设置,否则会发生冲突。于是我们在工程属性->C/C++->代码生成,运行时库选择:针对debug和release分别设置为“多线程调试DLL”和“多线程DLL”,这里我们就选择前者好了
? 然后,link正确的lib,工程属性->链接器->输入,附加依赖项加入“cppunitd.lib”
? 最后加入以下文件并编译运行:
math.h
/// math.h
// A TestFixture subclass.
#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 ();
// 可以添加新的测试函数
};
math.cpp
/// math.cpp
#include "stdafx.h"
#include "math.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 = 2;
}
void MathTest::tearDown()
{
}
void MathTest::testAdd()
{
int result = m_value1 + m_value2;
CPPUNIT_ASSERT( result == 4 );
}
<入口文件>.cpp
#include "stdafx.h"
#include "StartCppunit.h"
#include <cppunit/ui/mfc/TestRunner.h>
#include <cppunit/ui/text/TestRunner.h>
#include <cppunit/extensions/TestFactoryRegistry.h>
// 唯一的应用程序对象
//CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
CppUnit::TextUi::TestRunner runner;
// 从注册的TestSuite中获取特定的TestSuite, 没有参数获取未命名的TestSuite.
CppUnit::TestFactoryRegistry ®istry =
CppUnit::TestFactoryRegistry::getRegistry("alltest");
// 添加这个TestSuite到TestRunner中
runner.addTest( registry.makeTest() );
// 运行测试
runner.run();
return 0;
}
运行结果是:
OK<1 tests>
请按任意键继续..