全部博文(96)
分类: C/C++
2010-11-09 16:56:29
之前也看过别人写的一些单元测试框架,google的gtest算是比较有名的了,还有其它一些,基本实现都大同小异。总的来说,gtest显得有些重量级,另外的一些,测试用例不能分组,所有的用例只能一起运行,感觉不是很方便。周末的时候,折腾了一个相对比较轻量级的单元测试框架,命名为ZTest, 通过定义不同的测试类,可以支持对用例进行分组。下面从四个方面,对ZTest做一个介绍:
ZTest是一个轻量级的c++程序单元测试框架
可以从google code: 处获得ZTest的源码。
使用ZTest要遵循以下几个步骤:
(1)包含ztest.h:
1 |
#include "ztest.h" |
(2)声明测试类和测试用例
1 2 3 4 |
Z_BEGIN_TEST_CLASS(Test) Z_DECLARE_TEST_CASE(Global, Add) Z_DECLARE_TEST_CASE(Class, Add) Z_END_TEST_CLASS() |
(3)定义测试对象
1 |
Z_DEFINE_TEST_OBJECT(Test, tester) |
(4)定义测试用例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Z_DEFINE_TEST_CASE(Test, tester, Global, Add) { Z_EXPECT_EQ(1 - 3, 2); } class Test { public: int Add(int a, int b) { return a + b; } }; Z_DEFINE_TEST_CASE(Test, tester, Class, Add) { Test test; Z_EXPECT_TRUE(test.Add(3, -4) == -1); } |
(5)运行测试用例
1 2 3 4 |
int main() { Z_RUN_ALL_TESTCASES(tester); } |
(6)编译运行单元测试程序:
1 2 3 |
Running test case: Global/Add [Check failed] 1 - 3 == 2 Running test case: Class/Add [Passed] Tatal 2 cases, passed 1 |
(1)如果在测试某个类的私有成员,可以在#include “ztest.h”之前定义宏:Z_NEED_ACCESS_PRIVATE_MEMBER, 然后在被测试的类中用Z_DECLARE_FRIEND(name)把测试类声明为被测试类的友元类。
(2)可以通过定义多个测试类实现对测试用例的分类
(3)任何个人或者组织都可以免费使用ZTest。使用过程中如果发现什么bug, 或者有什么好的改进建议,都可以在这里给我留言,谢谢!
(4)如果不能访问google code的朋友,可以点击这里,直接进行下载: