Problèmes de tests unitaire avec QtCreator

Résolu/Fermé
Mourad2009B Messages postés 104 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 2 juillet 2024 - Modifié le 4 juil. 2022 à 13:06
Mourad2009B Messages postés 104 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 2 juillet 2024 - 4 juil. 2022 à 22:04
Bonjour à tous,

Je travaille avec QtCreator 7.0.2 comme IDE basé sur Qt 6.2.3 (sous windows 10).

J’ai créé un projet de sous-répertoire, dans le quel j’ai créé :
  • un projet Qt widgets Application ;
  • un projet Auto test project.

Dans le projet Qt widgets Application

main.cpp
#include "mainwindow.h"

#include <QApplication>
#include <QLocale>
#include <QTranslator>

int main(int argc, char *argv[])
{
      QApplication a(argc, argv);

      QTranslator translator;
      const QStringList uiLanguages = QLocale::system().uiLanguages();
      for (const QString &locale : uiLanguages) {
            const QString baseName = "ConversionsProject_" + QLocale(locale).name();
            if (translator.load(":/i18n/" + baseName)) {
                  a.installTranslator(&translator);
                  break;
            }
      }
      MainWindow w;
      w.show();
      return a.exec();
}


mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
      Q_OBJECT

public:
      MainWindow(QWidget *parent = nullptr);
      ~MainWindow();
      std::list<int> getDecimalsNumbers(int nbr);
      void conversionBinaryToDecimal(int nbr);
      

public slots:
      void validationSlot();

private:
      Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H


mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

using namespace std;

MainWindow::MainWindow(QWidget *parent)
      : QMainWindow(parent)
      , ui(new Ui::MainWindow)
{
      ui->setupUi(this);
      setFixedSize(430,185);
      ui->rdbBinaire->setChecked(true);
      ui->lineEditBinaire->setInputMask("BBBBBBBBBBBBBBBBBBBBBBBBBB");
      QObject::connect(ui->btnValider, SIGNAL(clicked()), this , SLOT(validationSlot()));
}

MainWindow::~MainWindow()
{
      delete ui;
}

void MainWindow::validationSlot()
{
      if(ui->rdbBinaire->isChecked())
      {
            conversionBinaryToDecimal(ui->lineEditBinaire->text().length());
            QMessageBox::information(this, "Attention", "Binnaire");
      }
      else if(ui->rdbDecimal->isChecked())
            QMessageBox::information(this, "Attention", "Decimal");
      else
            QMessageBox::information(this, "Attention", "Autres");
}

void MainWindow::conversionBinaryToDecimal(int nbr)
{
      list<int> listOfDecimalNumber = getDecimalsNumbers(nbr);
      list<int>::reverse_iterator it;
      int somme = 0;
     qsizetype i = 0;
      QChar car;
      for(it = listOfDecimalNumber.rbegin(); it != listOfDecimalNumber.rend(); it++, i++)
      {
            qDebug() << "__________________________________________________\n";
            car = ui->lineEditBinaire->text().at(i);
            somme += (*it) * car.digitValue();
            qDebug() << "*it = " << *it;
            qDebug() << "i = " << i;
            qDebug() << "car = " << car.digitValue();
            qDebug()  << "somme = " << somme;
      }
      ui->lineEditDecimal->setText(QString::number(somme));
}

list<int> MainWindow::getDecimalsNumbers(int nbr)
{
      list<int> listOfDecimalNumber;
      for(int i(0); i < nbr; i++)
      {
            listOfDecimalNumber.push_back(pow(2,i));
            //ActualNumber *= 2;
      }
      return listOfDecimalNumber;
}


mainwindow.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>310</width>
    <height>175</height>
   </rect>
  </property>
  <property name="minimumSize">
   <size>
    <width>310</width>
    <height>175</height>
   </size>
  </property>
  <property name="maximumSize">
   <size>
    <width>310</width>
    <height>175</height>
   </size>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QVBoxLayout" name="verticalLayout_2">
    <item>
     <widget class="QGroupBox" name="GrBox1">
      <property name="title">
       <string>Entrez un nombre</string>
      </property>
      <widget class="QWidget" name="layoutWidget">
       <property name="geometry">
        <rect>
         <x>10</x>
         <y>20</y>
         <width>273</width>
         <height>86</height>
        </rect>
       </property>
       <layout class="QGridLayout" name="gridLayout">
        <item row="1" column="1">
         <widget class="QLineEdit" name="lineEditBinaire"/>
        </item>
        <item row="2" column="0">
         <widget class="QRadioButton" name="rdbAutres">
          <property name="text">
           <string>Autre</string>
          </property>
         </widget>
        </item>
        <item row="0" column="2" rowspan="3">
         <layout class="QVBoxLayout" name="verticalLayout">
          <item>
           <widget class="QPushButton" name="btnValider">
            <property name="text">
             <string>&Valider</string>
            </property>
           </widget>
          </item>
          <item>
           <widget class="QPushButton" name="btnQuitter">
            <property name="text">
             <string>&Quitter</string>
            </property>
           </widget>
          </item>
         </layout>
        </item>
        <item row="0" column="1">
         <widget class="QLineEdit" name="lineEditDecimal"/>
        </item>
        <item row="0" column="0">
         <widget class="QRadioButton" name="rdbDecimal">
          <property name="text">
           <string>Décimal</string>
          </property>
         </widget>
        </item>
        <item row="1" column="0">
         <widget class="QRadioButton" name="rdbBinaire">
          <property name="text">
           <string>Binaire</string>
          </property>
         </widget>
        </item>
        <item row="2" column="1">
         <widget class="QLineEdit" name="lineEditAutres"/>
        </item>
       </layout>
      </widget>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>310</width>
     <height>22</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections>
  <connection>
   <sender>btnQuitter</sender>
   <signal>clicked()</signal>
   <receiver>MainWindow</receiver>
   <slot>close()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>255</x>
     <y>106</y>
    </hint>
    <hint type="destinationlabel">
     <x>154</x>
     <y>87</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>

Dans le projet Auto test project

tst_test.cpp

#include <QtTest>
#include <QCoreApplication>
#include "../ConversionsProject/mainwindow.h"

// add necessary includes here

class Test : public QObject
{
      Q_OBJECT

public:
      Test();
      ~Test();

private slots:
      void initTestCase();
      void cleanupTestCase();
      void test_case1();
      void test_getDecimalsNumbers();
      void test_lineEditEntree();

};

Test::Test()
{

}

Test::~Test()
{

}

void Test::initTestCase()
{

}

void Test::cleanupTestCase()
{

}

void Test::test_case1()
{

}

void Test::test_getDecimalsNumbers()
{
      MainWindow fentP;
      std::list<int> listOfDecimalNumber({1,2,4,8,16,32,64,128,256});
      QCOMPARE(fentP.getDecimalsNumbers(9), listOfDecimalNumber);
}

void Test::test_lineEditBinaire()
{
      
}
Dans la fonction
void Test::test_getDecimalsNumbers()
{
      MainWindow fentP;
      std::list<int> listOfDecimalNumber({1,2,4,8,16,32,64,128,256});
      QCOMPARE(fentP.getDecimalsNumbers(9), listOfDecimalNumber);
}


J’ai pu tester la fonction
getDecimalsNumbers()
qui se trouve dans le fichier
mainwindow.h
(voir
Test::test_getDecimalsNumbers()
), mais je n’arrive pas à accéder aux objets graphiques qui se trouvent dans le fichier
mainwindow.ui
pour pouvoir faire des tests

Si quelqu’un a une idée s'il vous plaît.
Merci d’avance

5 réponses

Whismeril Messages postés 19147 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 5 octobre 2024 919
26 juin 2022 à 10:36
Bonjour.
Note quand dans un texte il y a plein de gras ça donne l'impression de se faire crier dessus, et quand on se fait crier dessus on n'a pas envie d'aider


De plus, plus le code est simple à lire plus y'a des chances que quelqu'un le lisent.

Je t'invite donc d'une part à lire ce tuto sur la bonne utilisation des balises de code https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code et à reformuler ta question sans tout ce gras qui ne sert à rien.

0
Mourad2009B Messages postés 104 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 2 juillet 2024
Modifié le 4 juil. 2022 à 12:57
Bonjour à tous,
Merci pour m'avoir répondu Whismeril,
Pour le gras c'était surtout pour remplacer ce genre d'images

c'est les menus que j'ai mis en gras pour les distingués du reste du texte, et non pour créer sur qui que ce soit, par contre je créerai de joie si vous m'aidez à trouver une solution (je suis bloqué depuis 2 jours).

Mais si ce n'est pas autorisé, je les enlève.
0
mamiemando Messages postés 33306 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 octobre 2024 7 794
Modifié le 4 juil. 2022 à 13:07
Bonjour,

Par rapport à la mise en forme

J'ai remis en forme tes messages. Pour les prochaines fois :
  • Pense à préciser le langage utilisé dans ta balise de code (clique sur le triangle à droite du 4e bouton au dessus de la boîte dans laquelle tu tapes ton message).
  • Généralement on utilise plutôt de l'italique quand on parle de texte dans l'interface.
  • Tu peux éditer ton premier message pour voir comment j'ai procédé.


Par rapport au problème initial

As-tu regardé les liens suivants ?

Bonne chance
0
Mourad2009B Messages postés 104 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 2 juillet 2024
4 juil. 2022 à 15:49
Bonjour mamiemando,
Avant tout, Merci pour tes conseils.
J'ai déjà vu les tuto du Framework. pour les objets graphiques ils font des tests sur des objets du Framework lui même, alors que moi je pensais qu'il fallait que je le fasse sur l'objet graphique que moi même j'ai créé, mais ça revient au même. donc le problème est résolu.
0
mamiemando Messages postés 33306 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 7 octobre 2024 7 794
4 juil. 2022 à 16:31
Parfait, alors je bascule le sujet en résolu. Sache tu peux le faire toi même dans tes futurs fils de discussion (voir ce lien).

Bonne continuation
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mourad2009B Messages postés 104 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 2 juillet 2024
4 juil. 2022 à 22:04
OK ça sera sans faute. et merci pour tout.
0