QTestlib Manual翻譯

Trolltech公司提供的QTestlib框架,是一種針對基於QT編寫的程序或庫的單元測試工具。QTestLib提供了單元測試框架的基本功能,並提供了針對GUI測試的擴展功能。html

目錄:

QTestlib特性

設計QTestLib的目標是爲了簡化QT程序或庫的單元測試工做。windows

特性api

詳細描述安全

輕量級框架

QTestlib只包含6000行代碼和60個導出符號。函數

自包含工具

對於非GUI測試,QTestlib只須要Qt核心庫的幾個符號。單元測試

快速測試測試

QTestlib不須要特殊的測試執行程序,不須要爲測試而進行特殊的註冊。ui

數據驅動測試

一個測試程序能夠在不一樣的測試數據集上執行屢次。

基本的GUI測試

QTestlib提供了模擬鼠標和鍵盤事件的功能。

IDE友好

QTestlib的輸出信息能夠被Visual Studio和KDevelop解析。

線程安全

錯誤報告是線程安全的、原子性的。

類型安全

對模板進行了擴展使用,防止由隱式類型轉換引發的錯誤。

易擴展

用戶自定義類型能夠容易地加入到測試數據和測試輸出中。

注意:對於高級的GUI和應用程序測試需求,請參考Trolltech合做夥伴提供的測試產品。(譯者注:如FROGLOGIC提供的Squish工具)

QTestLib API

全部公有的方法都在QTest命名空間中。另外,QSignalSpy類爲QT的信號和槽提供了簡單的內省機制。

使用QTestLib

編寫一個測試程序

編寫一個測試程序,須要從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。

參閱:QTestLib Tutorial

QTestlib命令行參數

語法

執行自動測試的語法接收下列簡單形式:

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。

在Windows CE上遠程使用QTestLib

cetest可以幫助用戶方便地在Windows CE設備或模擬器上加載應用程序,而且它須要在單元測試被成功編譯後才能執行。

加載前,下列文件將拷貝到設備上:

  • 該工程連接的全部Qt庫

  • QtRemote.dll

  • 安裝時指定的c運行庫

  • .pro文件中DEPLOYMENT規則指定的全部文件

使用cetest

語法

執行自動測試的語法接受下列簡單形式:

cetest [options] ...

選項

cetest不只提供了與非交叉編譯平臺相同的選項,參考Command Line Arguments,並且增長了下列選項:

  • -debug

在調試模式下編譯測試程序。

  • -release

在發行模式下編譯測試程序。

  • -libpath path

指明拷貝Qt庫的目標路徑。

  • -qt-delete

執行結束後刪除Qt庫。

  • -project-delete

執行結束後刪除工程文件。

  • -delete

執行結束後刪除工程文件和Qt庫。

  • -conf

指定一個將被部署到遠程路徑中的qt.conf文件

注意:debug是默認的編譯選項。

QtRemote

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會記住該路徑,所以即便切換到交叉編譯環境,你也不須要從新設置它。

相關文章
相關標籤/搜索