2010-04-27 4 views
1

je MyWindow classe qui affiche une fenêtre vide, qui accepte un clic de souris, je dois test unitaire l'événement de clic de sourisComment utiliser QCOMPARE Macro pour comparer les événements

extrait de code:

void TestGui::testGUI_data() 
{ 
    QTest::addColumn<QTestEventList>("events"); 
    QTest::addColumn<QTestEventList>("expected"); 

    Mywindow mywindow; 
    QSize editWidgetSize = mywindow.size(); 
    QPoint clickPoint(editWidgetSize.rwidth()-2, editWidgetSize.rheight()-2); 

    QTestEventList events, expected; 
    events.addMouseClick(Qt::LeftButton, 0, clickPoint); 
    expected.addMouseClick(Qt::LeftButton, 0, clickPoint); 
    QTest::newRow("mouseclick") << events << expected ; 
} 

void TestGui::testGUI() 
{ 
    QFETCH(QTestEventList, events); 
    QFETCH(QTestEventList, expected); 

    Mywindow mywindow; 
    mywindow.show(); 

    events.simulate(&mywindow); 
    QCOMPARE(events, expected); } // prints FAIL! : TestGui::testGUI(mouseclick) Compared values are not the same 
    ... 
} 

Comment tester le clic de souris sur mywindow. existe-t-il une meilleure approche pour les tests unitaires de souris?

Merci, vels

Répondre

2

Jetez un oeil sur la documentation de l'espace de noms QTest. Il y a la fonction QTest :: mouseClick qui vous permet d'émuler le clic de la souris sur la position donnée de votre widget (il n'est même pas nécessaire d'afficher le widget).

Pour autant que je me souviens QCOMPARE utilise « opérateur == » pour les arguments donnés et si elle retourne false alors il essaie de l'imprimer en utilisant « QTest :: toString <T> (const T & t) » fonction. S'il n'y a pas d'implémentation pour un type d'argument QCOMPARE, il suffit d'imprimer que les valeurs sont différentes. Encore une fois jeter un oeil sur la documentation de l'espace de noms QTest pour plus de détails comment réimplémenter "QTest :: toString <T> (const T & t)" pour le type dont vous avez besoin.

Questions connexes