Qt文檔閱讀筆記-重現GUI事件進行單元測試

主要的邏輯是,存儲Widget事件,然後在Test中重放

如下,在私有槽函數中測試函數如果要加模擬,需要在後面添加_data()

class TestGui: public QObject
{
    Q_OBJECT

private slots:
    void testGui_data();
    void testGui();
};

下面的代碼中,QTest::addColumn爲添加列,第一個爲重現的事件,第二個爲目標預期值,以及這個QTest::newRow("XXXX")這裏爲跑起來後提示的值

void TestGui::testGui_data()
{
    QTest::addColumn<QTestEventList>("events");
    QTest::addColumn<QString>("expected");

    QTestEventList list1;
    list1.addKeyClick('a');
    QTest::newRow("char") << list1 << "a";

    QTestEventList list2;
    list2.addKeyClick('a');
    list2.addKeyClick(Qt::Key_Backspace);
    QTest::newRow("there and back again") << list2 << "";
}

下面這個函數將會執行2次,這個次數是根據QTest::addRow()的數量決定的

void TestGui::testGui()
{
    QFETCH(QTestEventList, events);
    QFETCH(QString, expected);

    QLineEdit lineEdit;

    events.simulate(&lineEdit);

    QCOMPARE(lineEdit.text(), expected);
}

 

 

下面是完整實例

程序運行截圖如下:

源碼如下:

test4.pro

QT += widgets testlib
SOURCES = main.cpp
INSTALLS += target

main.cpp

#include <QtWidgets>
#include <QtTest>

class TestGui: public QObject{

	Q_OBJECT

private slots:

	void testGui_data();
	void testGui();
};


void TestGui::testGui_data(){

	QTest::addColumn<QTestEventList>("events");
	QTest::addColumn<QString>("expected");

	QTestEventList list1;
	list1.addKeyClick('a');
	QTest::newRow("char") << list1 << "a";

	QTestEventList list2;
	list2.addKeyClick('a');
	list2.addKeyClick(Qt::Key_Backspace);
	QTest::newRow("中文") << list2 << "a";
}


void TestGui::testGui(){

	QFETCH(QTestEventList, events);
	QFETCH(QString, expected);

	QLineEdit lineEdit;
	events.simulate(&lineEdit);
	QCOMPARE(lineEdit.text(), expected);
}


QTEST_MAIN(TestGui);
#include "main.moc"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章