GUI-Tests mit QT

Alles rund um die Programmierung mit Qt
Antworten
Rollo1979
Beiträge: 3
Registriert: 11. Mai 2009 17:59
Wohnort: LuBu

GUI-Tests mit QT

Beitrag 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
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag 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); 
Rollo1979
Beiträge: 3
Registriert: 11. Mai 2009 17:59
Wohnort: LuBu

Beitrag 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?
Antworten