我有一个应用程序,它在Qt4中广泛使用了graphicsview架构,并且我想开始对ui组件进行自动化测试,但是我找不到任何与测试qgraphicsview / qgraphicswidget基础类相关的资源,也不知道应该测试什么或如何测试。
我有一个应用程序,它在Qt4中广泛使用了graphicsview架构,并且我想开始对ui组件进行自动化测试,但是我找不到任何与测试qgraphicsview / qgraphicswidget基础类相关的资源,也不知道应该测试什么或如何测试。
我在尝试进行QGraphicsView单元测试时遇到了问题。 我最大的问题是
QTest::mousePressEvent(view, Qt::LeftButton, 0);
结果为
鼠标事件"MousePress"未被接收小部件接受
被写入到控制台,并且我的事件处理程序从未被调用。我找到的解决办法是将事件发送到视口而不是QGraphicsView本身:
QTest::mousePressEvent(view->viewport(), Qt::LeftButton, 0);
这样可以将事件正确地发送到我的QGraphicsView
子类。这样,您就可以从高层次测试整个图形视图,以确保您的图形项适当地接收事件。
现在,进入您真正关心的问题。
图形密集型类通常 很难进行测试。从链接页面中获取一些建议,我建议(1)尽可能分离逻辑和表示,并且(2)不要在太低的级别进行测试。
无论如何,将逻辑与表示分开通常都是好的实践,但是当大部分逻辑用于创建表示时,这可能会很困难!对于QGraphicsItem对象,我们没有方便的QTest函数来模拟事件。因此,在设计类以响应语义上有意义的事件时,请使用您可以在测试期间实际构造的类型,而不是QGraphicsSceneEvent子类,例如使用
void MyGraphicsItem::pressed(const QPointF &pos, const QPointF &last)
mousePressEvent
方法从QGraphicsSceneMouseEvent中提取相关信息并调用自己的pressed
方法。您的测试将使用您的方法,您就不必担心创建人工QGraphicsSceneEvents了。