【QT】Qt單元測試淺析
Qt單元測試框架,使用於基於Qt的應用程式和庫,先從一個簡單的demo工程說起吧。
我們可以通過QtCreator來建立一個簡單的Qt單元測試工程,夏天到了,這個demo工程的名字就叫Summer好了,建立過程中其它選項預設,完成後生成兩個檔案:Summer.pro和tst_summertest.cpp,先來看一下這兩個檔案。
Summer.pro——
QT += testlib QT -= gui TARGET = tst_summertest CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += tst_summertest.cpp DEFINES += SRCDIR=\\\"$$PWD/\\\"
Summer.pro檔案中的QT+=testlib是必須的。
tst_summertest.cpp——
#include <QString> #include <QtTest> class SummerTest : public QObject { Q_OBJECT public: SummerTest(); private Q_SLOTS: void testCase1(); }; SummerTest::SummerTest() { } void SummerTest::testCase1() { QVERIFY2(true, "Failure"); } QTEST_APPLESS_MAIN(SummerTest) #include "tst_summertest.moc"
然後來編譯執行(使用QtCreator)一下,結果如下:
********* Start testing of SummerTest ********* Config: Using QtTest library 5.3.1, Qt 5.3.1 PASS : SummerTest::initTestCase() PASS : SummerTest::testCase1() PASS : SummerTest::cleanupTestCase() Totals: 3 passed, 0 failed, 0 skipped ********* Finished testing of SummerTest *********
在Summer工程中,C++程式碼裡include了<QtTest>標頭檔案,檔案結尾處include了對應的.moc檔案,測試類SummerTest要繼承自QObject類或QObject的子類,需使用Q_OBJECT巨集,測試方法testCase1()應標識為私有槽。
QTEST_APPLESS_MAIN(SummerTest)巨集實際上是一個main()函式,其定義如下:
#define QTEST_APPLESS_MAIN(TestObject) \
int main(int argc, char *argv[]) \
{ \
TestObject tc; \
return QTest::qExec(&tc, argc, argv); \
}
看到了吧,非常簡單,先是例項化一個SummerTest物件,然後呼叫QTest::qExec(),執行私有槽標識的所有測試方法,這裡是testCase1(),QTest是個namespace,留心上面的SummerTest工程執行結果的話,會發現多了兩個東東,initTestCase()和cleanupTestCase(),它們是測試框架自帶的,即使不顯式定義也會被呼叫,有點像C++的預設建構函式,前者在第一個測試方法執行前被呼叫,後者在最後一個測試方法執行後被呼叫,測試框架還提供了init()和cleanup(),它們分別在每一個測試方法執行的前後被呼叫,不顯式定義時是不會執行的。除了QTEST_APPLESS_MAIN()外,測試框架還提供了兩個類似的巨集,QTEST_MAIN()和QTEST_GUILESS_MAIN(),用法相同。
Summer工程的編譯執行也可以通過命令列來完成,有時候效果更好。
1、$qmake Summer.pro
使用qmake命令編譯Summer.pro,生成MakeFile檔案。
2、$make
使用make命令編譯MakeFile,生成tst_summertest可執行檔案,為什麼可執行檔案是tst_summertest而不是別的什麼呢,這是因為在Summer.pro檔案中指定了TARGET=tst_summertest,當然也可以設定成其它值。
3、$./tst_summertest
執行st_summertest,log輸出到了終端,那麼log可以輸出到指定檔案嗎,答案是可以的,命令格式如下:
$./tst_summertest -o output_path
這時,log輸出到了output_path指定的檔案中,終端上不再顯示log。
相關推薦
【node】----mocha單元測試框架-----【格爾尼卡ぃ】
ins number ber moc tutorial ride 對象 單元測試框架 cal 一、mocha簡介 單元測試是用來對一個模塊、一個函數、或者一個類來進行正確性的檢測工作 特點: 既可以測試簡單的JavaScript函數,又可以測試異步代碼,
【C#】【xUnit】【Moq】.NET單元測試Mock框架Moq初探!
在TDD開發模型中,經常是在編碼的同時進行單元測試的編寫,由於現代軟體開發不可能是一個人完成的工作,所以在定義好介面的時候我們就可以進行自己功能的開發(介面不能經常變更),而我們呼叫他人的功能時只需要使用介面即可。 但我們在編寫自己的單元測試並進行功能驗證的時候,如果介面的實現人還沒有完成程式碼怎麼
【4】spring單元測試和ApplicationContext區別
ApplicationContext 等於直接呼叫 public ClassPathXmlApplicationContext(String[] configLocations, boolean re
【Pytest】python單元測試框架pytest簡介
1、Pytest介紹 pytest是python的一種單元測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起來更簡潔,效率更高。根據pytest的官方網站介紹,它具有如下特點: 非常容易上手,入門簡單,文件豐富,文件中有很多例項可
【SpringBoot】Junit單元測試遇到的一些問題
情況 ①:不能有返回值@Controller public class FileControllerTest{ @Autowired private FileController fileController; @Test public S
【解決】Junit單元測試中出現的報錯
at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632) at java.lang.ClassLoader.de
【QT】Qt單元測試淺析
Qt單元測試框架,使用於基於Qt的應用程式和庫,先從一個簡單的demo工程說起吧。我們可以通過QtCreator來建立一個簡單的Qt單元測試工程,夏天到了,這個demo工程的名字就叫Summer好了,建
【QT】 QThread部分原始碼淺析
本文章挑出QThread原始碼中部分重點程式碼來說明QThread啟動到結束的過程是怎麼排程的。其次因為到了Qt4.4版本,Qt的多執行緒就有所變化,所以本章會以Qt4.0.1和Qt5.6.2版本的原始碼來進行淺析。 # QThread類的定義原始碼 Qt4.0.1版本原始碼: ```cpp #ifnde
【Android進階】Junit單元測試環境搭建以及簡單有用
rar theme 選擇 http 技術分享 才幹 ack package family 單元測試的目的 首先。Junit單元測試要實現的功能,就是用來測試寫好的方法是否可以正確的運行,一般多用於對業務方法的測試。 單元測試的環境配置 1.在Andro
【轉】QT中QWidget、QDialog及QMainWindow的區別
屏幕 編輯 派生 標記 裝飾 按鈕 set 沒有 idg QWidget類是所有用戶界面對象的基類。 窗口部件是用戶界面的一個基本單元:它從窗口系統接收鼠標、鍵盤和其它事件,並且在屏幕上繪制自己。每一個窗口部件都是矩形的,並且它們按Z軸順序排列。一個窗口部件可以被它的父窗口
【轉載】Qt中圖像的顯示與基本操作
繪制 nta pen 位置 產生 縮放 eas urn mod Qt可顯示基本的圖像類型,利用QImage、QPxmap類可以實現圖像的顯示,並且利用類中的方法可以實現圖像的基本操作(縮放、旋轉)。 參考:Qt中圖像的顯示與基本操作 - ykm0722的專欄 - 博客頻道
【原創】QT簡單計算器
代碼 creator AD new info 問題 連接 body short 代碼 //main.cpp #include "calculator_111.h" #include <QtWidgets/QApplication> int main(int
【Flask Rest API 單元測試】
ati rdo ces tps ont basic nal src mon Flask簡單的Rest API 接口測試示例代碼: import unittest import json from app import app class BasicTestCase(un
【轉】QT CEF3 消息循環處理
程序員 traits n) 希望 消息循環 help this dom 一段時間 初次寫博客,可能有點亂, 按照自己的實際經歷談一下CEF3鐘遇到的一些坑,希望對以後的小夥有些幫助。 先說一下經歷,當初第一次接觸CEF3的時候,沒做特殊處理,直接將cef3封裝成控件
【轉】Qt --------QCombobox元件的使用
方法/事件: 屬性: 樣式: QComboBox* m_combox; m_combox = new QComboBox(this); QStringLi
【SylixOS】QT-QWS流程介紹
QWS簡介 QWS(QT Windows System)是QT自行開發的視窗系統,體系結構類似X Windows的C/S結構。QWS Server在物理裝置上顯示,QWS Client實現介面,兩者通過socket進行彼此的通訊。在很多嵌入式系統裡,QT程式基本上都是用QWS
【QT】QT的學習:char×跟QString、string之間的轉換
(1)QString轉成char*或者char陣列。 QString data; QByteArray tempData = data.toLocal8Bit(); char *value = (ch
【QT】QT的學習:在QML中使用AJAX向某伺服器傳送請求獲取資料
(1)準備Ajax.js // GET function get(url, success, failure) { var xhr = new XMLHttpRequest; xhr.open("GET", url); xhr.onreadyst
【Qt】QT安裝完成提示:沒有這個QT版本的編譯器,請選擇一個或者多個
我是在VMware虛擬機器中安裝的centos6.6X86的系統,安裝qt-opensource-linux-x86-5.5.1,在linux桌面下直接安裝的,安裝完,
【轉載】Qt入門與提高:K02-01通過簡單exe介紹pro基本配置
版權宣告 --------------------------------------------------------------------------------------------------------------------- 作者: 女兒叫老白