如何使用QCOMPARE宏来比较事件

时间:2010-04-27 05:35:27

标签: qt qt4 qtestlib

我有MyWindow类弹出一个空白窗口,接受鼠标点击,我需要单击测试鼠标点击事件

代码段:

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
  ...
}

如何测试鼠标点击mywindow。是否有更好的单元测试鼠标事件方法?

谢谢, VELS

1 个答案:

答案 0 :(得分:2)

查看QTest命名空间文档。有QTest :: mouseClick功能,它允许您模拟鼠标点击窗口小部件的给定位置(甚至没有必要显示窗口小部件)。

据我记得,QCOMPARE使用“operator ==”作为给定的参数,如果它返回false,则它尝试使用“QTest :: toString&lt; T&gt;(const T&amp; t)”函数打印它。如果没有针对某种类型的QCOMPARE参数的实现,那么它只会打印出不同的值。再次查看QTest命名空间文档,了解如何为您需要的类型重新实现“QTest :: toString&lt; T&gt;(const T&amp; t)”。