Trolltech公司提供的QTestlib框架,是一種針對基於QT編寫的程序或庫的單元測試工具。QTestLib提供了單元測試框架的基本功能,並提供了針對GUI測試的擴展功能。html
設計QTestLib的目標是爲了簡化QT程序或庫的單元測試工做。windows
特性api
詳細描述安全
輕量級框架
QTestlib只包含6000行代碼和60個導出符號。函數
自包含工具
對於非GUI測試,QTestlib只須要Qt核心庫的幾個符號。單元測試
快速測試測試
QTestlib不須要特殊的測試執行程序,不須要爲測試而進行特殊的註冊。ui
數據驅動測試
一個測試程序能夠在不一樣的測試數據集上執行屢次。
基本的GUI測試
QTestlib提供了模擬鼠標和鍵盤事件的功能。
IDE友好
QTestlib的輸出信息能夠被Visual Studio和KDevelop解析。
線程安全
錯誤報告是線程安全的、原子性的。
類型安全
對模板進行了擴展使用,防止由隱式類型轉換引發的錯誤。
易擴展
用戶自定義類型能夠容易地加入到測試數據和測試輸出中。
注意:對於高級的GUI和應用程序測試需求,請參考Trolltech合做夥伴提供的測試產品。(譯者注:如FROGLOGIC提供的Squish工具)
全部公有的方法都在QTest命名空間中。另外,QSignalSpy類爲QT的信號和槽提供了簡單的內省機制。
編寫一個測試程序,須要從QObject類派生一個子類並加入一個或者多個私有槽。每個私有槽都是一個測試函數。QTest::qExec()函數用於執行測試對象中全部的測試函數。
另外,有4種私有槽不能做爲測試函數。他們由測試框架執行,可爲整個測試程序或當前測試函數進行初始化和清除操做。
initTestCase()會在第一個測試函數執行前調用。1
cleanupTestCase()會在最後一個測試函數執行後調用。
init()會在每個測試函數執行前調用。
cleanup()會在每個測試函數執行後調用。
若是initTestCase()函數執行失敗,任何測試函數都不會執行。若是init()函數執行失敗,緊隨其後的測試函數不會被執行,測試會繼續處理下一個測試函數。
例子:
class MyFirstTest: public QObject
{
Q_OBJECT
private slots:
void initTestCase()
{
qDebug("called before everything else");
}
void myFirstTest()
{
QVERIFY(1 == 1);
}
void mySecondTest()
{
QVERIFY(1 != 2);
}
void cleanupTestCase()
{
qDebug("called after myFirstTest and mySecondTest");
}
};
更多測試例子,請參閱QTestLib Tutorial。
若是使用qmake做爲編譯工具,只需在project文件中增長移行:
QT += testlib (注意,此處有錯,應爲CONFIG += qtestlib)
若是使用其它的編譯工具,確保把QTestLib的頭文件加入到include路徑(一般是Qt安裝路徑下的include/QtTest目錄)。若是你要建立Qt程序的發行版本,將測試程序連接到QtTest庫。若是你要建立Qt程序的調試版本,使用QtTest_debug。
語法
執行自動測試的語法接收下列簡單形式:
testname [options] [testfunctions[:testdata]]...
用你的可執行文件替換testname。testfunctions包含要執行的測試函數名,若是不指定testfunctions,全部的測試函數都會執行。若是測試函數名以後加上了測試數據行的名字,則測試函數執行時只會使用該行測試數據。
列如:
/myTestDirectory$ testQString toUpper
使用全部的測試數據執行toUpper測試函數。
/myTestDirectory$ testQString toUpper toInt:zero
使用全部的測試數據執行toUpper測試函數,使用行名爲zero的測試數據執行toInt測試函數(若是對應的測試數據不存在,相關的測試執行時就會失敗)。
/myTestDirectory$ testMyWidget -vs -eventdelay 500
執行testMyWidget測試程序,輸出每個信號發射信息,在每次模擬鼠標/鍵盤事件以後等待500毫秒。
選項
下列命令行參數能夠被接受:
-help
輸出命令行參數的幫助信息。
-functions
輸出測試中的全部測試函數。
-o filename
將輸出信息寫入到執行文件中,而不是打印到標準輸出上。
-silent
沉默地輸出,只顯示警告、錯誤和最少的狀態信息。
-v1
詳細輸出;輸出每次進入或離開測試函數的信息。
-v2
詳細輸出;也輸出每一個QCOMPARE()和QVERIFY()信息。
-vs
輸出發出的全部信號。
-xml
將輸出格式化成XML格式,而不是普通文本
-lightxml
輸出成XML標籤流。
-eventdelay ms
若是鍵盤或鼠標模擬(QTest::keyClick(),QTest::mouseClick()等)不指定延遲時間,則使用該參數(以毫秒爲單位)做爲延遲時間。
-keydelay ms
與-eventdelay的做用同樣,但隻影響鍵盤模擬的延遲時間,不影響鼠標模擬的延遲時間。
-mousedelay ms
與-eventdelay的做用同樣,但隻影響鼠標模擬的延遲時間,不影響鍵盤模擬的延遲時間。
-keyevent-verbose
詳細輸出鍵盤模擬信息。
-maxwarnings numberBR
設置警告信息的最大數量,0表示不限制,默認值爲2000。
cetest可以幫助用戶方便地在Windows CE設備或模擬器上加載應用程序,而且它須要在單元測試被成功編譯後才能執行。
加載前,下列文件將拷貝到設備上:
該工程連接的全部Qt庫
安裝時指定的c運行庫
.pro文件中DEPLOYMENT規則指定的全部文件
語法
執行自動測試的語法接受下列簡單形式:
cetest [options] ...
選項
cetest不只提供了與非交叉編譯平臺相同的選項,參考Command Line Arguments,並且增長了下列選項:
-debug
在調試模式下編譯測試程序。
-release
在發行模式下編譯測試程序。
-libpath path
指明拷貝Qt庫的目標路徑。
-qt-delete
執行結束後刪除Qt庫。
-project-delete
執行結束後刪除工程文件。
-delete
執行結束後刪除工程文件和Qt庫。
-conf
指定一個將被部署到遠程路徑中的qt.conf文件
注意:debug是默認的編譯選項。
QtRemote是在QTestLib以後編譯的一個小的庫。它容許主機系統建立一個在遠程設備上運行的進程,並等待其執行結束。
cetest使用Microsoft ActiveSync創建主機和設備之間的遠程鏈接,順利編譯cetest 和QtRemote須要與之相關的頭文件和庫。
在安裝Qt以前,須要正確設置INCLUDE和LIB環境變量。
Pocket PC上Windows Mobile 5的默認安裝可經過下述方式獲得:
set INCLUDE=C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Activesync\Inc;%INCLUDE%
set LIB=C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Activesync\Lib;%LIB%
注意Qt會記住該路徑,所以即便切換到交叉編譯環境,你也不須要從新設置它。