Как использовать QCOMPARE Macro для сравнения событий - PullRequest
1 голос
/ 27 апреля 2010

У меня есть класс 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. Есть ли лучший подход к событиям мыши модульного теста?

Спасибо, Велс

1 Ответ

2 голосов
/ 27 апреля 2010

Посмотрите документацию по пространству имен QTest. Есть функция QTest :: mouseClick, которая позволяет вам эмулировать щелчок мышью в заданной позиции вашего виджета (даже нет необходимости показывать виджет).

Насколько я помню, QCOMPARE использует "operator ==" для заданных аргументов, и если он возвращает false, он пытается распечатать его, используя функцию "QTest :: toString (const T & t)". Если для типа аргументов QCOMPARE нет реализации, он просто выведет, что значения разные. Снова взгляните на документацию по пространству имен QTest, чтобы узнать, как переопределить "QTest :: toString (const T & t)" для нужного вам типа.

...