没有合适的资源?快使用搜索试试~ 我知道了~
内容下载和安装CppUnit使用CppUnit创建基本测试使用断言再次测试字符串类组织新测试使用fixtures定制测试创建不使用宏的测试套件运行多个测试套件定制输出的格式更多定制:跟踪测试时间结束语参考资料本文是讨论开放源码单元测试工具的系列文章的第2篇,介绍非常受欢迎的CppUnit—最初由EricGamma和KentBeck开发的JUnit测试框架的C++版本。C++版本由MichaelFeathers创建,它包含许多类,有助于进行白盒测试和创建自己的回归测试套件。本文介绍一些比较有用的CppUnit特性,比如TestCase、TestSuite、TestFixture、TestRunn
资源推荐
资源详情
资源评论
开放源码开放源码C/C++单元测试工具,第单元测试工具,第2部分部分:了解了解CppUnit
内容内容
下载和安装 CppUnit
使用 CppUnit 创建基本测试
使用断言
再次测试字符串类
组织新测试
使用 fixtures 定制测试
创建不使用宏的测试套件
运行多个测试套件
定制输出的格式
更多定制:跟踪测试时间
结束语
参考资料
本文是讨论开放源码单元测试工具的 系列文章 的第 2 篇,介绍非常受欢迎的 CppUnit — 最初由 Eric Gamma 和 Kent Beck
开发的 JUnit 测试框架的 C++ 版本。C++ 版本由 Michael Feathers 创建,它包含许多类,有助于进行白盒测试和创建自己的回
归测试套件。本文介绍一些比较有用的 CppUnit 特性,比如 TestCase、TestSuite、TestFixture、TestRunner 和辅助宏。
常用缩写词常用缩写词
GUI::图形用户界面
XML::可扩展标记语言
下载和安装下载和安装 CppUnit
对于本文,我在一台 Linux® 机器(内核 2.4.21)上用 g++-3.2.3 和 make-3.79.1 下载并安装了 CppUnit。安装过程很简单,
是标准的:运行 configure 命令,然后运行 make 和 make install。注意,对于 cygwin 等平台,这个过程可能无法顺利地完成,所
以一定要通过 INSTALL-unix 文档了解详细的安装信息。如果安装成功,应该会在安装路径(CPPUNIT_HOME)中看到
CppUnit 的 include 和 lib 文件夹。清单 1 给出文件夹结构。
清单清单 1. CppUnit 安装目录结构安装目录结构
[arpan@tintin] echo $CPPUNIT_HOME
/home/arpan/ibm/cppUnit
[arpan@tintin] ls $CPPUNIT_HOME
bin include lib man share
要想编译使用 CppUnit 的测试,必须构建源代码:
g++ <C/C++ file> -I$CPPUNIT_HOME/include –L$CPPUNIT_HOME/lib -lcppunit
注意,如果是使用 CppUnit 的共享库版本,可能需要使用 –ldl 选项编译源代码。安装之后,还可能需要修改 UNIX® 环境变量
LD_LIBRARY_PATH 以反映 libcppunit.so 的位置。
使用使用 CppUnit 创建基本测试创建基本测试
学习 CppUnit 的最佳方法是创建一个叶级测试(leaf level test)。CppUnit 附带一整套预先定义的类,可以用它们方便地设计
测试。为了保持连续性,先回顾一下本系列 第 1 部分 中讨论过的字符串类(见 清单 2)。
清单清单 2. 简单的字符串类简单的字符串类
#ifndef _MYSTRING
#define _MYSTRING
class mystring {
char* buffer;
int length;
public:
void setbuffer(char* s) { buffer = s; length = strlen(s); }
char& operator[ ] (const int index) { return buffer[index]; }
int size( ) { return length; }
};
#endif
与字符串相关的典型检查包括检查空字符串的长度是否为 0 以及访问范围超出索引是否导致错误消息/异常。清单 3 使用
CppUnit 执行这些测试。
清单清单 3. 字符串类的单元测试字符串类的单元测试
#include <cppunit/TestCase.h>
#include <cppunit/ui/text/TextTestRunner.h>
class mystringTest : public CppUnit::TestCase {
public:
void runTest() {
mystring s;
CPPUNIT_ASSERT_MESSAGE("String Length Non-Zero", s.size() != 0);
}
};
int main ()
{
mystringTest test;
CppUnit::TextTestRunner runner;
runner.addTest(&test);
runner.run();
return 0;
}
要学习的第一个 CppUnit 类是 TestCase。要想为字符串类创建单元测试,需要创建 CppUnit::TestCase 类的子类并覆盖 runTest 方
法。定义了测试本身之后,实例化 TextTestRunner 类,这是一个控制器类,必须在其中添加测试(vide addTest 方法)。清单 4
给出 run 方法的输出。
清单清单 4. 清单清单 3 中代码的输出中代码的输出
[arpan@tintin] ./a.out
!!!FAILURES!!!
Test Results:
Run: 1 Failures: 1 Errors: 0
1) test: (F) line: 26 try.cc
assertion failed
- Expression: s.size() == 0
- String Length Non-Zero
为了确认断言确实起作用了,把 CPPUNIT_ASSERT_MESSAGE 宏中的条件改为相反的条件。清单 5 给出条件改为 s.size() ==0 之
后代码的输出。
清单清单 5. 条件改为条件改为 s.size( ) == 0 之后清单之后清单 3 中代码的输出中代码的输出
[arpan@tintin] ./a.out
OK (1 tests)
注意,TestRunner 并非运行单一测试或测试套件的惟一方法。CppUnit 还提供另一个类层次结构 — 即模板化的 TestCaller 类。
可以不使用 runTest 方法,而是使用 TestCaller 类执行任何方法。清单 6 提供一个小示例。
清单清单 6. 使用使用 TestCaller 运行测试运行测试
class ComplexNumberTest ... {
public:
void ComplexNumberTest::testEquality( ) { … }
};
CppUnit::TestCaller<ComplexNumberTest> test( "testEquality",
&ComplexNumberTest::testEquality );
CppUnit::TestResult result;
test.run( &result );
在上面的示例中,定义了一个类型为 ComplexNumberText 的类,其中包含 testEquality 方法(测试两个复数是否相等)。用这个类
对 TestCaller 进行模板化,与使用 TestRunner 时一样,通过调用 run 方法执行测试。但是,这样使用 TestCaller 类意义不
大:TextTestRunner 类会自动显示输出。而在使用 TestCaller 时,必须使用另一个类处理输出。在本文后面使用 TestCaller 类定义
定制的测试套件时,您会看到这种代码。
剩余8页未读,继续阅读
资源评论
weixin_38563176
- 粉丝: 2
- 资源: 920
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功