简介
最近没事 就看了下 unittestpp 的源码, 记录下一点东西和一个好的博客 .
笔记
自己做的UnitTestpp 的XML 图:
- 主要架构
- Reporter 部分的细致分类
关于如何使用 unittestpp 的一个好博客 :
http://www.ultimatepp.org/srcdoc UnitTest++ UnitTestpp$de-de.html
################################
更新。
下载地址
Latest (HEAD)
#Via git:
git clone https://github.com/unittest-cpp/unittest-cpp
#Via svn:
svn checkout https://github.com/unittest-cpp/unittest-cpp/trunk unittest-cpp
#Latest release (v1.5.0)
#Via git:
git clone https://github.com/unittest-cpp/unittest-cpp
cd unittest-cpp
git checkout v1.5.0
#Via svn:
svn checkout https://github.com/unittest-cpp/unittest-cpp/tags/v1.5.0 unittest-cpp
常用宏
CHECK &CHECK_EQUAL
- 最基本的测试宏 , 出错会打印详细的出错信息 。
- 出错不会中断。
TEST & TEST_FIXTURE
- TEST 注册一组测试
TEST(A_Name){
//...
}
-
- A_Name需要(在同一个命名空间中)保持唯一。
- 被包被的代码组成一组测试 , 注册进入测试队列。
- TEST_FIXTURE 基于一个类注册一组测试
TEST_FIXTURE(fixture ,A_Name){
//...
}
-
- fixture 需要是struct 或者 class 名字。
- 这个宏必须在cpp中
- 被包被的代码有fixture的全部权限 (其实继承了这个类)。
- fixture必须有默认构造函数。
SUIT 定义一个命名空间。
SUIT{
TEST(A_Name1){
//...
}
TEST_FIXTURE(fixture ,A_Name){
//...
}
}
最简单头文件和测试接口
#include "UnitTest++/UnitTestpp.hpp"
UnitTest::RunAllTest();
代码实例
test.h
class TestUnitTest {
public:
TestUnitTest(int i, int j) : a(i) , b(j) {}
TestUnitTest() : a(1) , b(2) {}
int GetAddResult() {return a+b;}
int GetSubResult() {return a-b;}
private:
int a, b;
};
test.cpp
#include "UnitTest++/UnitTestPP.h"
#include "test.h"
SUITE(TestSuite)
{
TEST(SimilarlyNamedTestsInDifferentSuitesWork)
{
CHECK( 1 == 1);
CHECK_EQUAL( 0 , 1);
}
TEST_FIXTURE(TestUnitTest, SimilarlyNamedFixtureTestsInDifferentSuitesWork)
{
CHECK(TestUnitTest(1,2).GetAddResult() ==3);
CHECK(GetAddResult() == 3);
}
}
main.cpp
#include "UnitTest++/UnitTestPP.h"
int main(int, char const *[])
{
return UnitTest::RunAllTests();
}
输出