Herramientas de ensayo Qt y QML
QML tests
qml_tests lanza todas las pruebas relacionadas con la interfaz. El demonio y libclient DEBEN ser confiables en esta parte; por lo tanto, no se requieren escenarios de prueba de conectividad. Idealmente, se deben usar datos simulados para evitar depender de eventos de red. Esto puede ser difícil a veces, y es posible que se pierdan algunas herramientas porque las pruebas en esta parte son un trabajo en progreso. Aquí hay algunas herramientas y principios para permitir que las pruebas se escriban rápidamente.
Datos simulados
Digamos que se requiere una prueba de IU para AccountComboBox según una lista de cuentas. En lugar de crear cuentas reales, se debe crear una lista simulada de cuentas. La forma más sencilla de hacerlo es serializar/deserializar un ComboBoxmodel de cuenta real. Primero, se requiere el modelo serializado:
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;
}
}
saveModel()
imprimirá la estructura serializada cada vez que se haga clic en el cuadro combinado. Aquí está el resultado:
[{"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"}]
Ahora, esto se puede usar fácilmente en una prueba. La mejor manera es agregar estos datos a una variable o a un archivo js separado (cf. https://doc.qt.io/qt-6/qtqml-documents-networktransparency.html). Un ejemplo del uso de los datos en una prueba:
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)
}
}
}
}
Pruebas
GoogleTest
GoogleTest es el marco de prueba y simulación de C++ de Google.
GoogleTest installation
Ubuntu / Debian:
apt instalar el test de libgtest-dev
Ejemplo principal.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
QtQuickTest integrates QML testing.
QtQuickTest installation
Ubuntu / Debian:
apt instalar qml-module-qqtest libqt5quicktest5
Example main.cpp:
#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"