Projet

Général

Profil

Feature - Fonctionnalité #3790

Feature - Fonctionnalité #3786: Tests Unitaires

Tests Unitaires Mainwindow

Ajouté par Icham Sirat il y a plus de 10 ans. Mis à jour il y a presque 9 ans.

Statut:
Fixed - Corrigé - Implémenté
Priorité:
Normale
Assigné à:
Icham Sirat
Version cible:
Début:
21/07/2014
Echéance:
% réalisé:

60%

Temps estimé:
8.00 h

Historique

#1 Mis à jour par Icham Sirat il y a plus de 10 ans

  • % réalisé changé de 0 à 10

#2 Mis à jour par Icham Sirat il y a plus de 10 ans

  • % réalisé changé de 10 à 20
Après plusieurs problèmes d'include, j'ai enfin trouvé comment tester la classe MainWindow =) :
  • définition du INCLUDEPATH pointant vers l'arborescence src
  • inclusion des .h servant à mainwindow.h
  • et (super important), création d'une AbulEduApplicationV1 pour recupération des différents objets apportés par cette lib (networkmanager...)

Par contre, comme on créé une AbulEduApp, les résultats des tests sont pollués par les logs/debugs.

J'ai donc ajouter une prise en compte d'un argument (-nolog) pour couper les debugs/logs (enfin je ne pouvais pas utiliser QT_NO_DEBUG car utile pour les tests).
Le problème est que l'exécutable créé pour les tests n'accepte pas d'arguments non connus (cf QTestLib arguments -> http://qt-project.org/doc/qt-4.8/qtestlib-manual.html#qtestlib-command-line-arguments.

Donc, si c'est un executable normal, on fait :

./abuledu-alacarte -nolog

Et si c'est pour les tests unitaires, il faut rajouter cet argument dans le code :

    int a = 1;
    char * arg = "-nolog";
    app = new AbulEduApplicationV1(a, &arg, VER_INTERNALNAME_STR, VER_PRODUCTVERSION_STR, VER_COMPANYDOMAIN_STR, VER_COMPANYNAME_STR);

    mainWindow = new MainWindow();
    mainWindow->show();

Et c'est nickel, plus de pollution, que des résultats de tests propres =)

@see https://redmine.ryxeo.com/issues/3791

#3 Mis à jour par Icham Sirat il y a plus de 10 ans

testCase_init_premierOngletPageLogiciels() : s'assure que la première page au lancement soit la pageLogiciels (a faire en premier car après test de navigation avec des changements de pages manuels dans le code
testCase_init_fixedSize() : qui permet de savoir si la taille est bien fixée à 1024x600 (dans tous les cas)
testCase_init_servicesWebIndisponible() : s'assure que le bouton webServices set invisible (non implémenté)
testCase_init_parametresWifi() : s'assure que les paramètres Wifi soit accessible (mode tablette) ou pas (autres modes)
testCase_init_abeGraphicMenu() : s'assure de la bonne instanciation du menu graphique et de sa lisibilité
testCase_ClickOngletApplications() : s'assure que le clic sur l'onglet "Applications" affiche le widget pageLogiciels
testCase_ClickOngletInstallation() : s'assure que le clic sur l'onglet "Installation" affiche le widget pageInstallSofts
testCase_ClickOngletAdministration() : s'assure que le clic sur l'onglet "Administration" affiche le widget pageAdministration
testCase_ClickOngletMonCompte() : s'assure que le clic sur l'onglet "MonCompte" affiche le widget pageMonCompte
testCase_ClickBtnAide() : s'assure que le clic sur le bouton "Aide" du menu graphique affiche le widget pageAide
testCase_ClickBtnParametres() : s'assure que le clic sur bouton "Parametre" du menu graphique affiche le widget pageConfiguration
testCase_ClickBtnDomaine() : s'assure que le clic sur le bouton "Domaine" (pageParametre) affiche le widget pageConfigurerDomaines
testCase_ClickBtnProxy() : s'assure que le clic sur le bouton "Proxy" (pageParametre) affiche le widget pageConfigurerProxy
testCase_ClickBtnMaj() : s'assure que le clic sur le bouton "MAJ" (pageParametre) affiche le widget pageConfigurerMAJ
testCase_ClickBtnInformations() : s'assure que le clic sur le bouton "Informations" (pageParametre) affiche le widget pageInformations
testCase_ClickBtnWifi() : s'assure que le clic sur le bouton "WiFi" (pageParametre) affiche le widget pageConfigurationWifi
testCase_ClickBtnConnexion() : s'assure que le clic sur le bouton en mode déconnecte affiche la pageLogin
testCase_ReceptionConfLogiciels_Stable() : s'assure de la bonne réception du fichier logiciels.conf (en stable)
testCase_ReceptionConfLogiciels_Beta() : s'assure de la bonne réception du fichier logiciels.conf (en beta)

#4 Mis à jour par Icham Sirat il y a plus de 10 ans

  • Statut changé de New - Nouveau à Pending - En attente

#5 Mis à jour par Icham Sirat il y a plus de 10 ans

  • Statut changé de Pending - En attente à Assigned - En cours

#6 Mis à jour par Icham Sirat il y a plus de 10 ans

  • % réalisé changé de 20 à 30

#7 Mis à jour par Icham Sirat il y a plus de 10 ans

  • % réalisé changé de 30 à 40

#8 Mis à jour par Icham Sirat il y a plus de 10 ans

Lors des tests sur l'affichage de la pageLogin, je vois passé ce warning :

QWARN  : Tests_Mainwindow::testCase_ClickBtnConnexion() QAbstractSocket::connectToHost() called when already looking up or connecting/connected to "auth.abuledu.net" 

Lorsqu'on affiche la pageLogin (méthode showEvent()), la classe AbulEduNetworkTests lance les tests de connectivité sur le serveur d'authentification.
Mais si on ré-affiche cette page, les tests sont relancés alors que le socket est déjà en train de tenter de ce connecter.
J'ai la solution, j'ouvre un ticket à l'endroit adéquat -> #3800

#9 Mis à jour par Icham Sirat il y a plus de 10 ans

  • GROSSE MODIFICATION DES TESTS :
    • suppression classe autotest.h
    • reprise d'un main classique de test avec enchaînement des tests avec QTest::qExec()
    • possibilité de s'authentifier durant les tests avec attente de la réponse serveur (j'en ai bavé ^^)
    • espionnage des signaux avec attente (émission asynchrone)

#10 Mis à jour par Icham Sirat il y a plus de 10 ans

Les méthodes de tests unitaires attendant un traitement après un click (par exemple attente du retour de la réponse boutique) sont bloquantes =)
(enfin elles attendent la fin du traitement et passe la main).

C'est grâce au QSignalSpy :

QSignalSpy signalSpy(mainWindow->getBtnOngletAdministration(), SIGNAL(clicked()));
mainWindow->getBtnOngletAdministration()->click();

Q_ASSERT(signalSpy.isValid());
QCOMPARE(signalSpy.count(), 1); // On s'assure que le signal est vraiment émis qu'1 fois !

while (signalSpy.count() != 1) {
   qDebug() << "Wait for reception signal mainWindow->getBtnOngletAdministration()::clicked()";
   QTest::qWait(200);
}

#11 Mis à jour par Icham Sirat il y a plus de 10 ans

testCase_ClickOngletMonCompte()
  • Mode connecté :
    • on s'assure d'être bien sur la pageMonCompte
    • l'objet AbulEduIdentité est égal au login SSO

#12 Mis à jour par Icham Sirat il y a plus de 10 ans

  • % réalisé changé de 40 à 60

Les tests présents (17) passent tous en mode connecté/deconnecté =) (Youpi)
Pushed revno 675

#13 Mis à jour par Icham Sirat il y a plus de 10 ans

Test sur la bonne réception du fichier logiciel.conf
  • test sur les 2 serveurs (stable et beta donc 2 méthodes de tests distincts)
  • test sur l’émission du signal finish de la requête (retour == QNetworkReply::NoError)
  • test sur la taille du fichier en reception (peut-être créer un autre test ?)

Commited revno 682

#14 Mis à jour par Icham Sirat il y a presque 9 ans

  • Statut changé de Assigned - En cours à Fixed - Corrigé - Implémenté

Voir le ticket parent.

Formats disponibles : Atom PDF

Redmine Appliance - Powered by TurnKey Linux