Seite 1 von 1

GUI-Tests mit QT

Verfasst: 11. Mai 2009 21:52
von Rollo1979
Guten Tag!
Ich habe eine Frage zu GUI-Tests mit QT. Wenn ich ein Projekt mit dem Qt Creator erstelle, ist das Userinterface (ui) in der Klasse MainWindow privat, etwa so
// Ausschnitt aus Klasse MainWindow
public:
MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindowClass *ui;
Um jetzt GUI-Tests zu schreiben muss ich im Testprojekt auf ui zugreifen. Ich hatte den Gedanken, das so zu tun,
void GuiTestClass::testGui()
{
MainWindow mainWindow;
QTest::mouseClick(mainWindow.ui->pushButton, Qt::LeftButton); // ui öffentlich
QString text = mainWindow.ui->lineEdit->text();
QVERIFY(text.compare("") == 0);
}
den Zeiger ui also öffentlich zu machen. Gut ist das nicht. Die andere Möglichkeit wäre, eine öffentliche Zugriffsmethode auf ui zu erstellen. Mir widerstrebt es allerdings, den Produktivcode "nur" für Tests zu ändern.
Hat jemand eine Idee, wie man das besser machen könnte? Welche der Möglichkeiten würdet Ihr bevorzugen? Oder gibt es für dieses (Standard-)problem ein allgemein anerkanntes Muster?
Vielen Dank für Eure Antworten
Rollo

Verfasst: 11. Mai 2009 22:13
von solarix
Wenn du das so machen willst, würde ich die Members eher nach Namen suchen:

Code: Alles auswählen

  QPushButton *btn =  mainWindow.findChild<QPushButton*>("btnTest");
  QLineEdit      *edt =  mainWindow.findChild<QLineEdit*>("edtTest");
  Q_ASSERT(btn && edt);
  QTest::mouseClick(btn, Qt::LeftButton);
  QVERIFY(edt->text().compare("")  ==  0); 

Verfasst: 12. Mai 2009 20:43
von Rollo1979
Vielen Dank, ich kannte als QT-Neuling QObject::findChild noch nicht. Das erspart mir, irgendeinen Zeiger auf ui außerhalb von MainWindow zu verwenden.

Jetzt schreibst Du, "wenn Du das so machen willst". Das macht mich neugierig, ob man GUI-Tests gewöhnlich vielleicht ganz anders macht. Könntest Du mir da einen Hinweis geben?
Grundsätzlich kenne mich mit der QTestLib schon aus, insbesondere kenne ich http://doc.trolltech.com/4.5/qtestlib-tutorial3.html. Allerdings fehlt mir etwas das praktische Know-How, wie man ein Testprojekt in der Praxis angeht. Kennt vielleicht jemand eine gute Einführung?