天天看點

第一次使用QtTest

之前c++代碼用過cppunit,然後開始用gtest,對于qt代碼,第一次嘗試使用qttest架構。

要使用qttest,首先需要在.pro檔案中增加配置,讓qmake知道要添加qt測試架構:

[cce]

config += qtestlib

[/cce]

然後,就可以建立一個cpp檔案,編寫測試代碼了:

[cce lang=”cpp”]

#include <qttest/qttest>

#include "../src/twitterapi.h"

class twitterapitest : public qobject

{

q_object

private slots:

void testrequesttoken();

};

void twitterapitest::testrequesttoken()

setting s;

s.twitterurl = "https://api.twitter.com/1";

twitterapi api(&s);

qsignalspy spy(&api, signal(authurlcreated(bool,qstring,token*)));

bool result = api.authurl();

qverify(result);

qtest::qwait(10000);

qverify(spy.isvalid());

qcompare(spy.count(), 1);

qlist<qvariant> arguments = spy.takefirst();

qverify(arguments.at(0).tobool() == true);

qdebug() << arguments.at(1);

}

qtest_main(twitterapitest)

#include "twitterapitest.moc"

qttest相關的函數和宏都在qttest/qttest中,直接都include進來即可,我主要用到了裡面的qsignalspy類。

測試類和普通qt類一樣,需要繼承qobject,所有的測試函數,都聲明為私有槽函數(private slots)。這裡的測試函數,主要使用了qsignalspy類,可以用這個類來檢測對應的信号是否已經發出,還可以擷取信号的參數。qttest還提供了一些斷言宏,具體可以檢視assistant中qtest的文檔。

每個測試類都需要使用qtest_main宏生成一個最終的main函數,make之後會生成一個對應的可執行檔案。最後,如果測試類聲明和實作在一個cpp檔案中,需要手工include生成的moc檔案。

感覺qttest沒有像cmake中的test那樣好的和makefile進行結合,沒有增加執行測試的階段。需要手工運作生成的可執行程式:

jinlingjie@babydragon ~/work/aflatoxin-build-desktop-qt_in_path___ $ ./aflatoxin

********* start testing of twitterapitest *********

config: using qtest library 4.8.1, qt 4.8.1

pass : twitterapitest::inittestcase()

qwarn : twitterapitest::testrequesttoken() don’t know how to handle ‘token*’, use qregistermetatype to register it.

qdebug : twitterapitest::testrequesttoken() oauth head: “oauth oauth_callback=”——-“,oauth_consumer_key=”———–“,oauth_nonce=”———–“,oauth_signature=”———–“,oauth_signature_method=”hmac-sha1″,oauth_timestamp=”1333445034″,oauth_version=”1.0″”

qwarn : twitterapitest::testrequesttoken() content-type missing in http post, defaulting to application/octet-stream

qdebug : twitterapitest::testrequesttoken() request token reply: “oauth_token=———&oauth_token_secret=———–&oauth_callback_confirmed=true”

qdebug : twitterapitest::testrequesttoken() qvariant(qstring, “https://api.twitter.com/oauth/authorize?oauth_token=————-“)

pass : twitterapitest::testrequesttoken()

pass : twitterapitest::cleanuptestcase()

totals: 3 passed, 0 failed, 0 skipped

********* finished testing of twitterapitest *********

轉載自:https://coolex.info/blog/306.html

繼續閱讀