CppUnit——Hello, World(zz)
環境:VC2003
CppUnit:1.12.0
(如果要在VC2003下使用CppUnit需要用VC2003編譯生成cppunit)
1.下載:
http://sourceforge.net/projects/cppunit/
2.安裝(編譯):
將下載的cppunit-1.12.0.tar.gz解壓,這裏解壓到D:\cppunit-1.12.0
D:\cppunit-1.12.0下有個INSTALL-WIN32.txt,它裏面包括源代碼和幾個測試例子,可以按照裏面的說明來編譯。
1)Open examples/examples.dsw in VC++ (contains all the samples).
用VC打開examples/examples.dsw
2)VC7 will ask you if you want to convert, anwser 'yes to all'.
VC7會詢問你是否進行轉換,選擇“全是”
3)Make HostApp the Active project
設置HostApp爲啓動工程
4)Compile
編譯
5)編譯完了,程序會將生成的庫自動拷到D:\cppunit-1.12.0\lib下
注:
1)對於cppunit和cppunit_dll,在工程屬性-C/C++-代碼生成-運行時庫裏設置的選項要和使用CppUnit進行測試的C++工程設置的一樣,否則會報2005連接錯誤
2)由於沒設置編譯順序,直接生成解決方案可能會有錯誤,多生成幾次就正確了
3.使用:
1)新建一個名爲UT的工程,編輯工程屬性:
C/C++-常規-附加包含目錄:"D:\cppunit-1.12.0\include"
鏈接器-常規-附加庫目錄:"D:\cppunit-1.12.0\lib"
鏈接器-輸入-附加依賴項:cppunit.lib
2)添加要被測試的類calc:
//calc.h
#pragma once
class calc
{
public:
int add(int i, int j);
int sub(int i, int j);
};
//calc.cpp
#include "calc.h"
int calc::add(int i, int j)
{
return i + j;
}
int calc::sub(int i, int j)
{
return i - j;
}
注:此類只實現:整數的加,整數的減
3)添加用來測試的類calcTest:
//calcTest.h
#pragma once
#include <cppunit/TestFixture.h>
#include <cppunit/extensions/HelperMacros.h>
#include "calc.h"
class calcTest : public CPPUNIT_NS::TestFixture
{
//定義一個測試套
CPPUNIT_TEST_SUITE(calcTest);
//添加測試用例
CPPUNIT_TEST(addTest1);
CPPUNIT_TEST(subTest1);
//測試套定義結束
CPPUNIT_TEST_SUITE_END();
public:
//用來進行測試前的設置,比如內存申請等
void setUp();
//用來進行測試後的設置,比如內存釋放等
void tearDown();
void addTest1();
void subTest1();
private:
calc* m_pcalc;
};
//calcTest.cpp
#include "calcTest.h"
void calcTest::setUp()
{
m_pcalc = new calc();
}
void calcTest::tearDown()
{
delete m_pcalc;
}
void calcTest::addTest1()
{
//執行測試函數
int iRet = m_pcalc->add(1, 2);
//斷言結果
CPPUNIT_ASSERT(3 == iRet);
}
void calcTest::subTest1()
{
//執行測試函數
int iRet = m_pcalc->sub(1, 2);
//斷言結果
CPPUNIT_ASSERT(-1 == iRet);
}
4)添加執行測試的主文件main.cpp:
#include "cppunit/CompilerOutputter.h"
#include "cppunit/ui/text/TestRunner.h"
#include "cppunit/extensions/HelperMacros.h"
#include "calcTest.h"
#include <fstream>
int main()
{
//測試執行者
CppUnit::TextUi::TestRunner oTestRunner;
//增加測試裝置
oTestRunner.addTest(calcTest::suite());
//輸出到文件
std::ofstream fout("./test.log");
oTestRunner.setOutputter(CppUnit::CompilerOutputter
::defaultOutputter(&oTestRunner.result(), fout));
//執行用例
oTestRunner.run();
}
http://hi.baidu.com/superql/item/3976a2916b82381e924f419a
========================================================
參考了這兩文:
配置和使用CPPUnit筆記http://dev.csdn.net/article/68/68259.shtm
便利的開發工具 CppUnit 快速使用指南http://www.devworkclub.com/bbs/FileView.php?id=200408051345330000
研究出來的使用步驟:
1. 編譯cppunit目錄\src\cppunit\CppUnitLibraries.dsw中的cppunit_dll項目,release版生成cppunit_dll.lib和cppunit_dll.dll,debug版生成cppunitd_dll.lib和cppunitd_dll.dll。這是CPPUnit基本類庫。
2. 編譯cppunit目錄\src\cppunit\CppUnitLibraries.dsw中的TestRunner項目。release版生成TestRunner.lib和TestRunner.dll,debug版生成TestRunnerd.lib和TestRunnerd.dll。這是使用MFC的圖形化界面的類庫。
3. 把所有lib文件放置到CommonFiles\Lib目錄下面。
或者
在VC中工具-》選擇-》目錄-》Library Files中將cppunit中的lib目錄放進來
4. 把dll文件放到相應的debug和release可執行目錄下面。
5.
6.vc中工程-》設置-》link
放入cppunitd_dll.lib
在“Projects/Settings.../C++/C++ Language”頁選中“Enable RTTI ”。
在“Projects/Settings.../C++/Code Generation”頁選擇“Use run-time library”中的內容:
Release版, 選擇"Mulithreaded DLL".
Debug版, 選擇 "Debug Multihreaded DLL".
7.可以引入宏AddingUnitTestMethod.dsm,可以方便生成測試框架
8.寫完待測試和測試類後,還要寫個main函數
提供的斷言:
CPPUNIT_ASSERT(condition) // 確信condition爲真
CPPUNIT_ASSERT_MESSAGE(message, condition) // 當condition爲假時失敗, 並打印message
CPPUNIT_FAIL(message) // 當前測試失敗, 並打印message
CPPUNIT_ASSERT_EQUAL(expected, actual) // 確信兩者相等
CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual) // 失敗的同時打印message
CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, delta) // 當expected和actual之間差大於delta時失敗
運行方式:
CppUnit::TextUi::TestRunner // 文本方式的TestRunner
CppUnit::QtUi::TestRunner // QT方式的TestRunner
CppUnit::MfcUi::TestRunner // MFC方式的TestRunner
在VC中工具-》選擇-》目錄-》Include Files中將cppunit中的include目錄放進來
===========================================================================