Qt és QML tesztelési eszközök
QML-vizsgálat
A qml_tests parancs elindítja az interfészhez kapcsolódó összes vizsgálatot. A rendszerfolyamatnak és a libclientnek ebben a részben megbízhatónak KELL lennie; ezért a csatlakozási tesztelési forgatókönyvek nem szükségesek. Ideális esetben próbavizsga adatokat kell használni a hálózati eseményektől való függőség elkerülése érdekében. Ez néha nehézkes lehet, és egyes eszközök kimaradhatnak, mivel a vizsgálatokat ebben a részben még folyamatosan fejlesztjük. Íme néhány eszköz és alapelv, amelyek lehetővé teszik a vizsgálatokat gyorsan.
Próbaadatok
Tegyük fel, hogy az AccountComboBox felhasználói felületének vizsgálatára szükség van egy fióklistától függően. Valódi számlák létrehozása helyett egy próba fióklistát kell létrehozni. Ennek legegyszerűbb módja egy valódi AccountComboBox modell szerializálása/szerializálásának megszüntetése. Először is szükség van a szerializált modellre:
diff --git a/src/app/mainview/components/AccountComboBoxPopup.qml b/src/app/mainview/components/AccountComboBoxPopup.qml
index 2f1b633a..0df2594d 100644
--- a/src/app/mainview/components/AccountComboBoxPopup.qml
+++ b/src/app/mainview/components/AccountComboBoxPopup.qml
@@ -43,6 +43,15 @@ Popup {
color: JamiTheme.transparentColor
}
+ function saveModel() {
+ var modelData = []
+ for (var i = 0; i < listView.model.count; ++i) {
+ modelData.push(listView.model.get(i))
+ }
+ var json = JSON.stringify(modelData)
+ console.warn(json)
+ }
+
focus: true
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
@@ -241,6 +250,7 @@ Popup {
width: root.width
onClicked: {
root.close();
+ root.saveModel();
LRCInstance.currentAccountId = ID;
}
}
A saveModel() függvény minden alkalommal kinyomtatja a szerializált struktúrát, amikor a kombinált listára kattintunk. Íme az eredmény:
[{"Alias":"AmarOk","ID":"a2d724d18a943e6c","NotificationCount":0,"Status":5,"Type":1,"Username":"amarok"},{"Alias":"Munnin","ID":"8a22b7d0176327db","NotificationCount":0,"Status":5,"Type":1,"Username":"munnin"},{"Alias":"TEST JAMI","ID":"3b7d2b9e2af83a47","NotificationCount":0,"Status":5,"Type":2,"Username":"696"},{"Alias":"Sébastien Blin","ID":"131ad59045a9a146","NotificationCount":0,"Status":5,"Type":1,"Username":"sblin"}]
Ez most könnyen használható egy vizsgálatban. A legjobb módszer, ha ezt az adatot egy változóba vagy egy külön JS-fájlba adjuk hozzá (vö. https://doc.qt.io/qt-6/qtqml-documents-networktransparency.html). Egy példa az adatok vizsgálatban való felhasználására:
TestWrapper {
AccountComboBoxPopup {
id: uut
function loadMockData() {
return JSON.parse('[\
{"Alias":"Foo","ID":"a2d724d18a943e6c","NotificationCount":0,"Status":5,"Type":1,"Username":"foo"}, \
{"Alias":"Bar","ID":"8a22b7d0176327db","NotificationCount":0,"Status":5,"Type":1,"Username":"bar"}, \
{"Alias":"TEST JAMI","ID":"3b7d2b9e2af83a47","NotificationCount":0,"Status":5,"Type":2,"Username":"696"}, \
{"Alias":"Whatever","ID":"131ad59045a9a146","NotificationCount":0,"Status":5,"Type":1,"Username":"whatever"}]')
}
TestCase {
name: "Check model size"
function test_checkModelSize() {
var accountList = findChild(uut, "accountList")
accountList.model = uut.loadMockData()
compare(accountList.model.length, 4)
}
}
}
}
A vizsgálatok
GoogleTest
A GoogleTest a Google C++ vizsgálni és próba-vizsgálni keretrendszere.
GoogleTest telepítése
Ubuntu / Debian:
apt telepíteni a google test libgtest-dev
Példák main.cpp
#include <gtest/gtest.h>
TEST(Test, Test1)
{
EXPECT_EQ(0, 0); // OK
EXPECT_EQ(1, 0); // ERROR and continues
ASSERT_EQ(0, 0); // OK
ASSERT_EQ(1, 0); // ERROR and stops execution
}
int main(int argc, char *argv[])
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS(); // Runs Test1 and any other included test
}
QtQuickTest
A QtQuickTest integrálja a QML tesztelést.
QtQuickTest telepítése
Ubuntu / Debian:
apt telepíteni qml-module-qqtest libqt5quicktest5
Példa main.cpp-fájl:
#include <QtQuickTest/quicktest.h>
#include <QQmlEngine>
class Setup : public QObject
{
Q_OBJECT
public:
Setup() {}
public slots:
void qmlEngineAvailable(QQmlEngine *engine)
{
// Code to be run before the tests
}
};
QUICK_TEST_MAIN_WITH_SETUP(testqml, Setup)
#include "main.moc"