Pregunta

Tengo una aplicación que hace uso extensivo de la arquitectura graphicsview en Qt4 y me gustaría empezar de prueba automatizada de los componentes de interfaz de usuario, pero no puedo encontrar recursos relacionados con lo que debería ser la prueba o la forma de probar clases basadas QGraphicsView / qgraphicswidget?

¿Fue útil?

Solución

He estado corriendo en problemas al tratar de QGraphicsView prueba de la unidad. Mi mayor problema fue que

QTest::mousePressEvent(view, Qt::LeftButton, 0);

resultados en

  

Ratón evento "MousePress" no aceptado por recepción Reproductor

conseguir escribe en la consola, y mis controladores de eventos no recibiendo llamadas. La solución que he encontrado es enviar el evento a la vista, no el propio QGraphicsView:

QTest::mousePressEvent(view->viewport(), Qt::LeftButton, 0);

que envía el evento a mi subclase QGraphicsView como debería. Esto le debe permitir probar todo sus gráficos vista desde un alto nivel para asegurarse de que sus elementos gráficos están recibiendo eventos adecuadamente.

Ahora, a sus preguntas reales.

-intensivo de gráficos clases son notoriamente difícil prueba href="http://c2.com/cgi/wiki?GuiTestingGameApps"> . Espigar algunos consejos de las páginas enlazadas, sugeriría a (1) la lógica separada y presentación tanto como sea posible, y (2) no se prueba en un nivel demasiado bajo.

La separación de la lógica de presentación es generalmente una buena práctica de todos modos, pero puede ser difícil cuando la mayor parte de su lógica se gasta la creación de la presentación! En el caso de QGraphicsItem objetos, no tenemos funciones Qtest convenientes a eventos Simular para nosotros. Por lo tanto el diseño de sus clases para responder a eventos semánticamente significativos utilizando los tipos de su realidad se puede construir durante las pruebas, no subclases QGraphicsSceneEvent, por ejemplo, el uso

void MyGraphicsItem::pressed(const QPointF &pos, const QPointF &last)

A continuación, haga que su método mousePressEvent extraer la información relevante de la QGraphicsSceneMouseEvent y llame a su propio método pressed. Sus pruebas A continuación, utilizar el método, y usted no tendrá que preocuparse acerca de la creación QGraphicsSceneEvents artificiales.

El problema de la lo a prueba es considerablemente más difícil, sin embargo. Por ejemplo, usted no querrá posiciones de código duro de elementos gráficos en sus pruebas. ¿Qué pasa cuando el motor gráfico cambia de debajo de usted y sus artículos se vuelven ligeramente diferente? En su lugar, usted debe concentrarse en las pruebas semánticamente significativos. Están chocando estos dos objetos? ¿Cambia el color de este elemento cuando lo selecciono?

La idea fundamental aquí es diseñar y probar sus clases en el nivel de la semántica de la aplicación, no el nivel de la QGraphicsView. Es posible que desee un pequeño número de ensayos bien construidos que prueba su traducción de QGraphicsSceneEvents a eventos de su aplicación, pero entiendo que los van a ser más frágil que la mayor parte de sus pruebas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top