Projet

Général

Profil

Utiliser des tests unitaires

Tout est traduit sur le site suivant: http://qt.developpez.com/tutoriels/remi-achard/qt-test/ je ne vais donc pas refaire le monde une fois de plus mais par contre quand j'ai voulu utiliser ça dans un logiciel je me suis heurté à un problème concret: certes l'exemple marche mais ça s'utilise comment dans la vie réelle ?

Pour les libs AbulÉdu*

Créer des tests unitaires pour les lib AbulEdu*

1ere étape de compréhension: avec une MainWindow

L'exemple étant très limité, je me suis fixé pour 1er objectif de pouvoir l'utiliser pour tester/valider une fonction de ma classe MainWindow (classe par défaut quand on créé un nouveau projet qt). Je créé un projet "toto-test" dont voici le code:

  • toto-test.pro
CONFIG += qtestlib
TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .

# Input
HEADERS += mainwindow.h
FORMS += mainwindow.ui
SOURCES += main.cpp mainwindow.cpp
  • main.cpp (remarquez bien que j'ai mis la main en commentaire)
#include <QtGui/QApplication>
#include "mainwindow.h" 

QTEST_MAIN(MainWindow)
#include "moc_mainwindow.cpp" 

/*int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}*/
  • mainwindow.cpp
#include "mainwindow.h" 
#include "ui_mainwindow.h" 

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

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

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

void MainWindow::majuscule()
{
    QString str = "Hello";
    QCOMPARE(str.toUpper(), QString("HELLO"));
}
  • mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtTest/QtTest>
#include <QMainWindow>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    void changeEvent(QEvent *e);

private:
    Ui::MainWindow *ui;

private slots:
    void majuscule();

};

#endif // MAINWINDOW_H
  • Et enfin, compilation et lancement
qmake -project "CONFIG += qtestlib" && qmake && make && ./toto-test

Conclusion: c'est beau, ça marche mais ça ne m'avance pas beaucoup plus :( Je ne vois toujours pas comment ajouter dans mon code des tests unitaires qui seront ou pas utilisés lors de la compilation ... par exemple je veux bien qu'en mode debug je les utilise et qu'en mode release tout le code de tests unitaires soit "oublié" de la compilation ... mais comment faire ça ?

Redmine Appliance - Powered by TurnKey Linux