1. 程式人生 > >【QT】Qt單元測試淺析

【QT】Qt單元測試淺析

Qt單元測試框架,使用於基於Qt的應用程式和庫,先從一個簡單的demo工程說起吧。

我們可以通過QtCreator來建立一個簡單的Qt單元測試工程,夏天到了,這個demo工程的名字就叫Summer好了,建立過程中其它選項預設,完成後生成兩個檔案:Summer.protst_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_summertestlog輸出到了終端,那麼log可以輸出到指定檔案嗎,答案是可以的,命令格式如下:

$./tst_summertest -o output_path

這時,log輸出到了output_path指定的檔案中,終端上不再顯示log


相關推薦

node----mocha單元測試框架-----格爾尼卡ぃ

ins number ber moc tutorial ride 對象 單元測試框架 cal 一、mocha簡介 單元測試是用來對一個模塊、一個函數、或者一個類來進行正確性的檢測工作 特點: 既可以測試簡單的JavaScript函數,又可以測試異步代碼,

C#xUnitMoq.NET單元測試Mock框架Moq初探!

在TDD開發模型中,經常是在編碼的同時進行單元測試的編寫,由於現代軟體開發不可能是一個人完成的工作,所以在定義好介面的時候我們就可以進行自己功能的開發(介面不能經常變更),而我們呼叫他人的功能時只需要使用介面即可。 但我們在編寫自己的單元測試並進行功能驗證的時候,如果介面的實現人還沒有完成程式碼怎麼

4spring單元測試和ApplicationContext區別

ApplicationContext 等於直接呼叫 public ClassPathXmlApplicationContext(String[] configLocations, boolean re

Pytestpython單元測試框架pytest簡介

1、Pytest介紹 pytest是python的一種單元測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起來更簡潔,效率更高。根據pytest的官方網站介紹,它具有如下特點: 非常容易上手,入門簡單,文件豐富,文件中有很多例項可

SpringBootJunit單元測試遇到的一些問題

情況 ①:不能有返回值@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

QTQt單元測試淺析

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

SylixOSQT-QWS流程介紹

QWS簡介 QWS(QT Windows System)是QT自行開發的視窗系統,體系結構類似X Windows的C/S結構。QWS Server在物理裝置上顯示,QWS Client實現介面,兩者通過socket進行彼此的通訊。在很多嵌入式系統裡,QT程式基本上都是用QWS

QTQT的學習:char×跟QString、string之間的轉換

(1)QString轉成char*或者char陣列。 QString data; QByteArray tempData = data.toLocal8Bit(); char *value = (ch

QTQT的學習:在QML中使用AJAX向某伺服器傳送請求獲取資料

(1)準備Ajax.js // GET function get(url, success, failure) { var xhr = new XMLHttpRequest; xhr.open("GET", url); xhr.onreadyst

QtQT安裝完成提示:沒有這個QT版本的編譯器,請選擇一個或者多個

我是在VMware虛擬機器中安裝的centos6.6X86的系統,安裝qt-opensource-linux-x86-5.5.1,在linux桌面下直接安裝的,安裝完,

轉載Qt入門與提高:K02-01通過簡單exe介紹pro基本配置

版權宣告 --------------------------------------------------------------------------------------------------------------------- 作者: 女兒叫老白