【问题标题】:QTest covering paint methodQTest 覆盖漆法
【发布时间】:2019-05-22 07:50:25
【问题描述】:

我有自定义的 QWidgets,所有的绘画都是手动完成的(fillRect、drawRect、drawText、drawPixmap..)。多达 120 个属性会影响将要绘制的内容、闪烁方式等。旧式意大利面条代码。

当我改变某些东西时,我想首先测试覆盖旧功能。有没有推荐的方法如何用单元测试覆盖QWidget::paintEvent(QPaintEvent* event)?我必须模拟 QPainter,还是有办法检查paintEvent 输出?

你是如何用测试覆盖paintEvetnt的?

【问题讨论】:

  • 您可以截取小部件的屏幕截图并进行比较。 IMO,这是测试事物呈现方式的最佳和最精确的方法。
  • @vahancho 在 QTestlib 中是否有这样做的标准方法?还是通过自己的方法(或外部库)逐像素比较?
  • 这并不像看起来那么难。存储当前小部件的基线图像。当您更改某些内容时,请截取小部件的屏幕截图,例如带有QPixmap::grabWidget() 功能。将像素图转换为QImage 并将其与基线图像进行比较:QImage::operator!=()。这只会告诉你它们是否不同。为了查看差异,您需要编写自己的函数并使用一些工具。
  • 单元测试 UI 通常是在浪费时间和痛苦......如果您可以提取小部件逻辑,则应该对其进行测试。

标签: c++ qt qt5 qwidget qtestlib


【解决方案1】:

最后存储和比较图像,如:

auto configuredImage = widgetUnderTest->grab().toImage();
QImage sampleImage;      
sampleImage.load("src/Images/configuredImage.png");
QCOMPARE(configuredImage, sampleImage);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2012-01-28
    相关资源
    最近更新 更多