cppunit在vs2008下使用的环境搭建(上)

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 &registry = 

      CppUnit::TestFactoryRegistry::getRegistry("alltest");

  // 添加这个TestSuite到TestRunner中

  runner.addTest( registry.makeTest() );

  // 运行测试

  runner.run();

return 0;

}

运行结果是:

OK<1 tests>
请按任意键继续..

原文地址:https://www.cnblogs.com/blueswitkey/p/2877827.html