English 中文(简体)
How to use QCOMPARE Macro to compare events
原标题:

I have MyWindow class which pops up a blank window, which accepts a mouse click, I need to unit test the mouse click event

Code snippet:

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

How to test the mouse click on mywindow. is there any better approach to unit test mouse events?

Thanks, vels

问题回答

Take a look on QTest namespace documentation. There is QTest::mouseClick function which allows you to emulate mouse click on the given position of your widget (there is even no necessity to show the widget).

As far as I remember QCOMPARE uses "operator==" for the arguments given and if it returns false then it tries to print it using "QTest::toString<T>(const T& t)" function. If there is no implementation for a type of QCOMPARE arguments then it will just print that values are different. Again take a look on the QTest namespace documentation for details how to reimplement "QTest::toString<T> (const T& t)" for the type you need.





相关问题
Qt: Do events get processed in order?

If I had a class A, where one of its functions does: void A::func() { emit first_signal(); emit second_signal(); } Assuming that a class B has 2 slots, one connected to first_signal, and the ...

How to determine how much free space on a drive in Qt?

I m using Qt and want a platform-independent way of getting the available free disk space. I know in Linux I can use statfs and in Windows I can use GetDiskFreeSpaceEx(). I know boost has a way, ...

Drag & drop with .ui files

I m having big troubles with drag & drop. I ve created a new Qt Designer Form Class in which I have one QListWidget and one QWidget. Now I want to enable dragging & dropping between these two ...

Link errors on Snow Leopard

I creating a small desktop application using Qt and Poco on Mac OS X Snow Leopard. Qt works fine, but once I started linking with Poco I get the following warning: ld: warning: in /Developer/SDKs/...

Showing two windows in Qt4

My friend and I have each created parts of a GUI using Qt 4. They both work independently and I am trying to integrate his form with the my main window. As of now this is the code I am using to try ...

Qt equivalent of .NET data binding?

Is there an equivalent of .NET s data binding in Qt? I want to populate some combo boxes and other widgets with QStrings that refer to specific entities in my database. However, it would be cleaner ...

热门标签