技术开发 频道

Wince和Windows Mobile下native C++的单元测试

 【IT168技术文档】

 单元测试(Unit Test)已经成为开发过程中不可分割的一部分,也是refactoring的基础,在Wince和Windows Mobile开发native  C++时可以使用CppUnitLite进行单元测试。

 在其他平台开发C++的时候,我一直使用CppUnit进行单元测试,可是CppUnit不支持Wince平台,因此在Wince下选择CppUnitLite进行单元测试。CppUnitLite是CppUnit的作者Michael Feathers重新开发的针对C++的单元测试框架。其开发目的是更加简便的开发单独的测试用例(只是需要一个TEST的宏就自动注册测试,而不需要同时并且分别使用函数,头文件和注册三个不同的文件。)同时CppUnitLite去掉C++的一些新特性,例如RTTI, exceptions, and templates,所以CppUnitLite更容易移植,CppUnitLite完全支持Wince和Windows Mobile。

 环境搭建

 下面讲述CppUnitLite在Wince和Windows Mobile下环境的搭建。

 先从http://www.objectmentor.com/resources/bin/CppUnitLite.zip下载CppUnitLite。

 新建一个Smart Device的项目

 选择相应的平台,由于这是native的库,所以编译的Output与平台相关,使用时需要选择相应的平台。

 选择Static Library并取消Precompiled header的选项。

 把下载的文件中/om/CppUnitLite/下的所有文件拷贝到项目目录CppUnitLite下,把CppUnitLite下的所有.h和.cpp加入项目中

 编译后生成静态库CppUnitLite.lib。

 使用CppUnitLite

 在需要进行单元测试的项目下建立一个文件夹叫做CppUnitLite,把需要的头文件拷贝到这个文件夹下。

 在Linker里面增加依赖库 CppUnitLite.lib

 

 

  #include "CppUnitLite\TestHarness.h"

 #include <string>

 int _tmain(int argc, _TCHAR* argv[])

 {

 TestResult tr;

 TestRegistry::runAllTests(tr);

 return 0;

 }

 SimpleString StringFrom(const std::string& value)

 {

 return SimpleString(value.c_str());

 }

 class ClassA

 {

 public:

 int Method1()

 {

 return 5;

 }

 double Method2()

 {

 return 1.88587;

 }

 std::string Method3()

 {

 return "string1";

 }

 bool Method4()

 {

 return true;

 }

 };

 TEST( Stack, test_simple )

 {

 ClassA a;

 LONGS_EQUAL(5, a.Method1());

 DOUBLES_EQUAL(1.9, a.Method2(), 0.1);

 CHECK_EQUAL("string", a.Method3());

 CHECK(!a.Method4());

 }

 TEST用于定义测试类,第一个参数为测试名,一般使用类名字,第二个为测试分组名字。 LONGS_EQUAL用于整型比较,DOUBLES_EQUAL用于浮点数的比较,第三个参数为精度。CHECK_EQUAL用于字符串的比较,由于CppUnitLite不依赖于STL,所以需要StringFrom函数来转换std::string到CppUnitLite的string类。CHECK是逻辑比较,这个宏可以用于任何的比较,例如有一个类重载了==(等号操作符),那么可以使用CHECK来比较。

查看原文地址

0
相关文章