问题标签 [qttest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
129 浏览

bash - Travis CI Qt 测试集成

Travis 依靠可执行文件上的退出代码来确定测试是通过还是失败。Qt Test 的设计使得每个测试类都包含在它自己的可执行文件中,所以在构建之后,我最终会在我的 bin/tests 文件夹中得到一堆测试。

我不想在构建脚本中对每个测试名称进行硬编码,因此我目前正在使用它们来执行所有测试名称。

测试都正确执行,但是,即使其中一个测试返回一个不同于 0 的退出代码,该行本身也会被解释为退出代码 0,并且测试总是通过 Travis 所知道的。

我想要的是相当于for %a in (bin\tests\*.exe) do %awindows。

有关一个小示例,请参见https://travis-ci.org/VSRonin/QtModelUtilities/jobs/362301017

0 投票
0 回答
77 浏览

c++ - QtTest QBenchmark 打印所有运行时间

我正在使用 QBENCHMARK 宏在我的测试中运行基准测试。我将iterations nand-o myfile.csv,csv标志传递给可执行文件。不幸的是,Qt 只为您提供平均运行时间、累积运行时间和运行次数。

我想要所有的运行时间,这样我就可以计算置信区间。有没有办法做到这一点?

0 投票
1 回答
384 浏览

c++ - Qt 测试:在测试项目中实例化对象时找不到错误符号

我确定我只是在原来的课程(会议视图)中遗漏了一些东西,但我无法完全理解所缺少的东西。当我尝试构建包含我的会议视图类的 tst_conferencepage.cpp 文件时,当我尝试实例化类型为会议视图的对象时,我收到一条关于未找到架构 x86_64 的符号的错误消息。

会议视图.h:

会议视图.cpp:

tst_conferencepage.cpp:

ConferencePage::testAFCConference() 中的阻塞代码是我实例化一个conferenceView 类型的对象的地方,并且错误源于此。

UnitTests.pro:

项目层级:

完整的错误信息:

架构 x86_64 的未定义符号:
“conferenceView::queryConference(QString)”,引用自:tst_conferencepage.o 中的 ConferencePage::testAFCConference() “conferenceView::conferenceView()”,引用自:tst_conferencepage 中的 ConferencePage::testAFCConference()。 o ld:未找到架构 x86_64 的符号 clang:错误:链接器命令失败,退出代码 1(使用 -v 查看调用)make[1]: * [UnitTests] 错误 1 ​​make:* [sub-UnitTests- make_first] Error 2 01:21:30: The process "/usr/bin/make" exited with code 2. Error while building/deploying project NFLTeamsProject (kit: Desktop Qt 5.11.2 clang 64bit) When execution step "Make"

任何帮助表示赞赏,在此先感谢您!

0 投票
1 回答
366 浏览

c++ - 断开 qt 计时器以进行单元测试

我正在尝试对一些使用 QTimer 进行定期操作的遗留代码进行单元测试:

我需要为 onTimeout() 方法编写单元测试,因此我试图从 MyClass::onTimeout 断开 QTimer::timeout 并从单元测试触发更新。

如何使断开连接正常工作?或者有没有更好的方法从 QtTestLib 控制 QTimer?添加 MyClass::disconnectTimer() 是唯一可行的选择吗?

0 投票
0 回答
690 浏览

c++ - Qt 单元测试 C++ 与 QML qtquick

我正在尝试实现 Qt 单元测试,我想从 C++ 中“单击”QML 中的 qtquick 按钮。我能够成功地在我的一个 QML 对象的属性上使用 QCompare,test_case3但我不知道如何在test_case4. 我的文件在下面。

tst_case_1.cpp

main.qml

0 投票
0 回答
219 浏览

c++ - 在 QtTest 中接收分配 QSharedPointer 的致命错误

在 TestGroup_Person 中,当我从 JB_PersonDao 检索 QSharedPointer<-JB_TableRowProt> 并将其分配给 QSharedPointer<-JB_TableRowProt> aGroup_Person(在 .h 中)时,然后我在 TestGroup_Person 的方法中收到此错误。

或者,如果我在每个方法中从 JB_DaoProt 检索 QSharedPointer<-JB_TableRowProt>(并且不将其分配给 QSharedPointer<-JB_TableRowProt> aGroup_Person),它工作正常。

有人可以向我解释为什么这个作业似乎导致了错误吗?

我收到了这个错误:

这是代码:主要:

TestGroup_Person.h

};

TestGroup_Person.cpp:

JB_DaoProt的相关方法:

0 投票
0 回答
489 浏览

c++ - 如何从 Qt Test 单元测试类访问和测试 Qt 窗口的私有小部件?

我正在尝试对 Qt Widgets 应用程序中的各个小部件进行单元测试(使用 Qt 测试),例如 menuBar、pushButton 等。该项目已设置为 Subdirs 项目,其中 Qt 应用程序和 GUI 测试子项目都有他们自己的目录和 .pro 文件。问题是我无法从测试类 (MainWindowTest) 访问驻留在 MainWindow 中的任何小部件,正如编译器所说:

  • 错误:无法将“MainWindow”转换为其私有基类“Ui_MainWindow”
  • 'pushButton' 是 'Ui_MainWindow' 的私有成员
  • 此处受私有继承的约束

我试图在 MainWindow 中将 MainWindowTest 声明为朋友,但没有帮助。我还尝试在单独的标头中转发声明 MainWindowTest,然后将其包含在 mainwindow.h 中(仍然将 MainWindowTest 声明为朋友),但这也无济于事。

只需在 Creator 中创建一个默认的 subdir Widget 应用程序和一个 GuiTest AutoTest 子目录项目,就会为此生成所有必要的代码。

我在这里实际上想要实现的是在 MainWindowTest 的私有区域中创建一个 MainWindow 实例,然后编写几个单元测试来检查小部件的存在,然后进行一些基于键盘和鼠标事件的测试。但是,因为我什至无法访问小部件,所以这样做非常困难。

我已经在网上浏览了几个“解决方案”,但它们似乎都不是干净的解决方案。我希望现在能够执行 QVERIFY2(win.pushButton, "pushButton was not created.") 之类的事情,但正如我所说,pushButton 是不可访问的。

0 投票
0 回答
101 浏览

qt - 在 QT 测试中使用超类

我正在尝试使用超类来定义通用构造函数 ,和initTestCase()测试cleanupTestCase()代码。init()cleanup()

执行时,将执行超类插槽 ( initTestCase(), cleanupTestCase()),但忽略子类插槽。

有没有办法在这种情况下执行子类的测试?QT 测试中应该如何组织常见行为?

编辑:这已通过使用私有插槽得到修复,但似乎存在重复(嵌套执行),显示在测试结果窗格中,相对于普通输出。发布了一些示例代码。

父.h:

父级.cpp:

testwithparent.h:

testwithparent.cpp:

控制台输出:

测试结果输出:

0 投票
1 回答
45 浏览

qt - QtTest:防止可执行文件被复制到系统

因此,我正在编写一些库并决定对其进行适当的单元测试(如 TDD 等)。QtTest 框架看起来很适合入手。图书馆本身很好,测试也很好。

但是当我将库和测试项目都添加到我的工作项目中时,CI 构建出人意料地失败了。发生测试可执行文件(Linux 上的 LibraryTest.exe 或类似文件)被复制:

  • 到 Windows 上单独文件夹中的 %QTDIR%/tests
  • 到 Linux 上的 /usr/tests

我的测试项目设置将此行为添加到“安装”构建阶段,它们是(重要的):

如您所见,注释掉CONFIG += testcase可执行文件后不再复制到某处。我读过这个配置选项用于自动化测试,看起来很有用,但没有写任何关于任何特殊安装阶段的内容。测试可执行文件存在DESTDIR就好了,所以它不是一些意外错误。

我的问题是:为什么会这样?我可以指定其他文件夹吗?自动化很有用,但即使实现了它也可能会绑定到一些更方便的目录。

我做错 QtTest 了吗?提前感谢您的关注。

0 投票
1 回答
615 浏览

python - 如何在 QTest 中生成鼠标点击 QGraphicsWidget?

我想测试从面板按下按钮的功能。问题是按钮不是 QPushButtons,而是 QGraphicWidget 元素。

如何生成此按钮鼠标单击以测试其行为?

按钮不是简单的 QPushButtons,因为它们在鼠标悬停时具有特殊行为、动画等。这些按钮被添加到场景中,然后将场景添加到视图中,并将视图作为小部件添加到布局中。我可以看到可以使用以下方法单击视图:

但这并没有点击按钮。我也试过指定按钮的位置:

但由于某种原因,这是不受支持的论点

Button 类和 PanelWithButtons 类的代码 (panel_with_buttons.py):

测试.py:

作为输出,我收到鼠标点击第一个按钮(我可以看到'button1 clicked'),但我不知道如何生成点击第二个按钮。