Qt4'teki grafik görünümü mimarisini kapsamlı bir şekilde kullanan bir uygulama var ve ben, UI bileşenlerinin otomatik olarak test edilmesini başlatmak istiyorum, ancak ben ile ilgili herhangi bir kaynak bulamıyorum Qgraphicsview/qgraphicswidget tabanlı sınıfları nasıl test edeceğimi veya test etmem gerektiğini?Nasıl birim testi qt grafikleri görüntüle widget'leri/öğeleri görüntüle
cevap
QGraphicsView birim testini denemeye çalışırken sorunlarla karşılaşıyorum. Benim en büyük sorun
Fare olay
QTest::mousePressEvent(view, Qt::LeftButton, 0);
sonuç "MousePress" konsola nmak widget'ı
alarak kabul edilmedi ve benim olay işleyicileri denilen alma asla olmasıydı. Bulduğum çözüm görüntü alanına olayı göndererek değil, QGraphicsView kendisi:
olması gerektiği gibi benimQGraphicsView
alt sınıfa olayı gönderir
QTest::mousePressEvent(view->viewport(), Qt::LeftButton, 0);
. Bu, grafik öğelerinizin olayları uygun şekilde aldığından emin olmak için tüm grafik görünümünüzü yüksek bir seviyeden test etmenizi sağlar.
Şimdi, gerçek sorularınız için.
Grafik yoğun sınıflar notoriouslyhard - test içindir. Bağlantılı sayfalardan bazı tavsiyelerde bulunmak gerekirse, (1) mantığa ve sunumun mümkün olduğunca olabileceğini ve (2) çok düşük seviyelerde test yapmamayı öneririm.
Sunumdan ayırma mantığı genellikle iyi bir uygulamadır, ancak mantığınızın büyüklüğü sunumu oluştururken harcanması zor olabilir! QGraphicsItem nesneleri durumunda, bizim için olayları simüle etmek için uygun QTest işlevlerine sahip değiliz. Yani
void MyGraphicsItem::pressed(const QPointF &pos, const QPointF &last)
kullanın semantik türlerini kullanarak anlamlı olaylar senin aslında mesela testler değil QGraphicsSceneEvent alt sınıfları, sırasında inşa edebilir yanıtlamak için sınıfları tasarım ardından mousePressEvent
yöntem QGraphicsSceneMouseEvent ilgili bilgileri ayıklamak ve kendi aramasını pressed
yöntem. Testleriniz daha sonra yönteminizi kullanacaktır ve yapay QGraphicsSceneEvents oluşturma konusunda endişelenmenize gerek kalmayacaktır.
Buradaki temel fikir, sınıflarınızı QGraphicsView düzeyine değil, uygulamanızın semantik seviyesine göre tasarlamak ve test etmektir. QGraphicsSceneEvents öğesinin çevirisini uygulamanızın etkinliklerine test eden, iyi yapılandırılmış birkaç test isteyebilirsiniz, ancak bunların testlerinizin çoğundan daha hassas olacağını anlayabilirsiniz.
- 1. QT: simüle edilmiş birim testi
- 2. Görünümdeki Verileri Görüntüle Model Verileri Görüntüle
- 3. Dosyadan ayrıntılar Dosyayı Görüntüle Görüntüle MVC 5
- 4. Geçerli kullanıcıyı Görünümden görüntüle
- 5. WYSIWYG 'Android'de Editör'ü Görüntüle
- 6. jsp görüntülerini görüntüle
- 7. HTML Biçimlendirilmiş Dizeyi Görüntüle
- 8. Tablo görünümü hücrede görüntüle
- 9. QT birim testi: qtestlib Segmentasyon hatası
- 10. İşlenmemiş XML talebini görüntüle
- 11. Görünüm MVC'de görüntüle
- 12. TortoiseHg'de topolojik kafaları görüntüle
- 13. Eclipse'deki Bağımlılık bağımlılığını görüntüle
- 14. Galerideki resmi görüntüle
- 15. Tarayıcıda javascript olaylarını görüntüle
- 16. UITableViewCell'deki rozeti görüntüle
- 17. MailItem Gönder, Görüntüle MsgBox
- 18. Tepki Görüntüle Yerel Uygulamada Yanıtla
- 19. bir Qt-Hızlı Testi
- 20. Birim Test Grafikleri
- 21. Permalink-fu - URL'yi farklı görüntüle
- 22. Android: Animasyondan sonra Görüntüle taşı?
- 23. KeyEventArgs'ı ViewModel'den WPF'de Görüntüle (MVVM)
- 24. Yardımı görüntüle: boolean false classBinding
- 25. Bir sütunun tüm öğelerini görüntüle?
- 26. Ekrandaki yol haritasını görüntüle: Swift
- 27. Geçerli yolu yalnızca terminalde görüntüle
- 28. SVG viewBox merkezde görüntüle (Raphael)
- 29. Laravel/Lumen: Görüntüle :: share() alternatif?
- 30. outlook maddesine göre görüntüle userProperties
Bağlantımdaki soru hakkında bir fikrim var mı? Viewport() kullanılarak QGraphicsItem, bu yöntemi kullanarak fare kapmak öğesi olarak ayarlanmış gibi görünmüyor? – paulm