一 使用
先说一下如何使用这个framework。其基本用法和java的junit差不多,只是没那么强大而已。看一下下面所示的这个IntWraper 类:
现在要给它写一个unittest ,你只要做如下工作就可以了:
- 包含头文件: #include "FAssert.h"
- 定义一个测试类,在这个类中使用下列宏来申明test case:
DECLARE_AS_TESTER //申明一个类为tester,需要放在开头[必有]
DECLARE_SETUP //申明一个setup方法[可选]
DECLARE_TEARDOWN //申明一个teardown方法用于清理工作[可选]
DECLARE_TEST(testName) //申明一个test[至少有一个,否则没意义]
3. 实现定义的setup,teardown,和test方法;
4. 调用宏CALL_TEST注册这个unit test:
5. 在主程序中定义一个TestMain,然后调用它的run方法:
using namespace FTest;
TestMain myTest(std::cout);
myTest.run();
对IntWraper的完整的test 代码如下:
运行后你会得到输出结果:
从这个结果你可以看到一共运行了多少个test,成功多少,失败多少,如果失败了,还会给出失败的具体位置.
二 框架
下面这个结构图是从xunit的结构图演变而来的,只不过在这里的testcase是由一系列的IFuncObject组成。对上面给出的例子来
说,setup,teardown,testValue和testAdd都对应一个IFuncObject.这些IFuncObject只是对保存了
setup,teardown,和test函数这些成员函数指针而已。在TestCase的run方法被调用的时候,按照下列顺序调用这些
IFuncObject的Do方法:
setup
test1
...
teardown
最后在内存中会形成如下图所示的一棵树。
这棵树有点特殊,因为它只有三层,最顶层的是一个suite,第二层是一些testcase,它们与程序员写的tester是一一对应的。最底层的是一些
IFuncObject对象,它们对应与tester中的setup,teardown和具体的测试函数。由于对IFuncObject应用了
NullObject模式,所以无论是否定义setup和teardown,每一个testcase,都有一个setup和一个teardown的
IFuncObject。
调用的过程基本上是一个广度优先的过程。
三.实现
实现其实是很简单地,这里只说一下注册原理
3.1 注册
注册是通过TestObject来完成的,TestObject的申明如下:
它从IFuncObject继承下来的,接收两个模板参数,一个是tester,另一个是一个成员函数指针。一句
DECLARE_TEST(testValue)
会定义一个TestObject对象,这样在tester被创建的时候,就会自动将这个函数指针注册到tester的对应的TestCase之中。
3.2 跟踪测试用例
本来是想用异常来跟踪测试用例的运行状态的,可是发现这样就变得复杂啦。所以这个实现没有用,用了最简单地方式,调用类的全局函数来实现。
3.3 源码
源码只包含两个头文件FTest.h和FAssert.h
分享到:
相关推荐
一个Symbian OS Unit Test Framework
testngpp - next generation unit test framework for c/c++ testngpp - next generation unit test framework for c/c++
CloudTest 是一种重新定义的单元测试方法和方法,它可以使您的测试工作变得更加简单和高效。 它是一个集测试用例管理、测试数据管理、断言管理、自动化回归、性能监控和测试报告于一体的纯java轻量级框架。
我的代码库由 matlab 和 simulink 的混合组成,这个工具包试图为我的代码创建一个统一的单元测试框架。 不幸的是,该工具箱的simulink部分严重依赖于我的模型创建工具箱,因此您也必须下载该文件才能正常工作。 ...
TUT可以执行单元测试框架可以预期的所有必需任务,但同时又小巧而健壮(大约2.5k SLOC,具有98%的自测范围)。 部署TUT的速度非常快,因为它是仅标头的库。
R单元测试框架R功能实现标准的单元测试框架,并带有附加的代码检查和报告生成工具
A unit testing framework for Arduino platforms
Google Test is an excellent xUnit style c++ unit testing framework. It is highly recommended. One (minor) drawback of Google Test is it's text based UI, and this project attempts to help. 本系列...
适用于 Windows 的 C++ 单元测试框架,具有图形和控制台显示,仅利用 Windows API 来帮助与所有 Windows C++ 编译器和框架兼容
:test_tube:single header unit testing framework for C and c++ - sheredom/utest.h-源码
它的工作方式与JUnit相似,并且已在MS Web或C#Developer 2010中用作测试的应用程序的一部分。较早的版本(00.05及更低版本)是为MS Visual Studio 2005开发的,仍然可以下载。 为此,他们开发了MS Visual Studio...
This paper describes the value of using a SystemVerilog unit test framework when creating a functional verification environment. Applying this Agile aspect may help achieve improvements in both ...
IeUnit是测试网站逻辑行为的简单框架。 它在Windows XP + Internet Explorer平台JavaScript中实现。
这是一个由学生创建的项目,它与2009年Spring学期的德克萨斯大学CS307课程一起提供。它是协助开发家庭作业解决方案的框架。
C ++单元测试框架,与CppUnit相比非常缩减,但非常简单,完全使用头文件实现。
Unit model which is independent of a particular unit sting framework), using model-to-model ansformations. Then model-to-text transformations e applied on the xUnit model to generate platform- ...
该项目还演示了一种以不同于Make的替代方式构建混合语言代码的新方法。 大多数FORTRAN本质上都很重要,用于核和航空法规等中,并且需要积极地维护和编写。 请帮助将TDD实践引入FORTRAN社区。 我个人退出,因为我...
CxTest是用于C的类似于JUnit / cppUnit / xUnit的单元测试框架。它非常可移植,因为它不依赖于RTTI,异常处理或任何库(包括标准库)
scalatest-embedmongo.zip,使用嵌入式mongodb数据库在scala中测试的api示例scala lib to“unit”测试mongodb请求
We'll look at how to use the unit test framework called Ceedling to help us do this. In the first example, we'll see how to create tests and write the code to make them pass. In the second example we ...