问题标签 [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 回答
1013 浏览

c++ - Qt 单元测试:指针列表上的 QCOMPARE 函数

Qt 测试框架是否支持比较指针列表或者我做错了什么?

我的单元测试源码如下:

运行此测试后,我期待通过测试,但测试失败并显示以下输出:

如果列表包含非指针元素,QCOMPARE 没有任何问题并返回“通过”输出。

0 投票
1 回答
584 浏览

c++ - 用 Q_DECLARE_METATYPE 声明 unsigned char[]

我正在尝试使用 QtTest 设置一些单元测试,并且我想使用 QFETCH。

我正在测试以下功能:

它只是将 char 数组转换为位向量。

所以,我这样设置我的测试类:

当我这样做时,编译器会说:

并且 :

我认为这两个错误是相关的,所以我Q_DECLARE_METATYPE(unsigned char[]);在类声明之前添加了,但后来我得到了这个:

qmetatype.h'*' 标记之前的预期 '>' (第 1695 行)

是否可以向unsigned char[]Qt 的 QMetaType 系统声明?谢谢

0 投票
1 回答
1674 浏览

c++ - 使用 qExec 创建 Qt 测试套件

QTest鼓励您将单元测试组织为单独的可执行文件。为此有一个特殊的宏,它会生成 main 函数:QTEST_MAIN.

我发现这种方法不是很干净,一次运行所有测试更有用。所以我搜索了是否有这样做的可能性,我发现有几个人提出了相同的解决方案:

Qt:从多个测试类运行单元测试并汇总所有测试类的输出

http://www.davideling.it/2014/01/qtest-multiple-unit-test-classes/

https://alexhuszagh.github.io/2016/using-qttest-effectively/

解决方案是放弃使用QTEST_MAIN宏并编写自己的main函数来执行要执行的测试:

我发现这是一个好主意,但是,有一个问题。Qt 的文档qExec一部分听起来像这样:

对于独立测试应用程序,不应多次调用此函数,因为用于将测试输出记录到文件和执行单个测试函数的命令行选项将无法正确运行。

这些人透露的解决方案只是建议:执行qExec多次。谁能向我解释到底是command-line options for logging test output to files and executing individual test functions will not behave correctly什么意思?

这种方法究竟会出现什么问题?

0 投票
0 回答
583 浏览

c++ - Qt 5.9.1 中的 QML 测试失败

在 Qt 5.9.1 版本中编译时它不起作用..任何人都帮我在 qml 中编译这个 TestCase ..

得到这样的错误:

类型 TestCase 不可用且未安装模块 Qt.test.qtestroot

0 投票
1 回答
516 浏览

qt - QTest:使用子对话框测试对话框

我正在尝试为这样的用例创建测试:

  • 打开一个对话框
  • 单击此对话框中的按钮会打开一个子对话框
  • 单击子对话框中的按钮将其关闭
  • 关闭子对话框后,在对话框中完成了一些操作

我能够编写一个测试来完成所有这些并组织对话框以使这样的测试成为可能。但是,出现了一个奇怪的问题:如果这些步骤重复多次,那么最终操作会重复更多次。为简化起见,我们假设该操作正在输出输入数据。这是重复模式:

  • 使用数据“1”执行测试 -> 输出为“1”
  • 使用数据“1 2”执行测试 -> 输出为“1 2 2”
  • 使用数据“1 2 3”执行测试 -> 输出为“1 2 2 3 3 3”
  • 使用数据“1 2 3 4”执行测试 -> 输出为“1 2 2 3 3 3 4 4 4 4”

似乎以某种方式重复了最终动作信号,但我一直无法找到代码有什么问题。这是重现该问题的简化代码示例:

测试用例

主对话框

子对话框

如果需要(并且可能在 StackOverflow 中),我可以发布整个 QtCreator 项目或这些类的头文件。

0 投票
1 回答
88 浏览

c++ - QTest 没有显示对话框

Qt 4.7.1

我有一个直到最近表现良好的 qttest 设置。我遇到并处理过使用单次计时器与模式对话框交互的需要。

但是,我现在看到了相反的行为;诸如 QFileDialog::getSaveFileName 之类的调用会立即返回,而不会显示对话框。这是因为我执行了合并,所以我假设它背后有一些代码或构建更改,但它不是函数调用本身。

就示例代码而言,我无法发布我的整个框架或 AUT,但在测试函数中考虑以下内容:

呼叫立即返回,按钮设置为 NoButton。我应该补充一点,我的测试有一些框架,我用 QTest::qExec 手动启动每个测试。(框架没有改变,我敢肯定)

关于可能导致这种情况的任何想法?

编辑:

上例中由消息框启动的事件循环已将 quitNow 设置为 true,这导致 exec 立即返回。我现在正在寻找为什么会这样设置,同时请随时启发我!

0 投票
1 回答
254 浏览

qt - QListWidget 无法识别来自 QTest::mouseDClick 的信号

我正在尝试使用 QTest 来测试与 QListWidget 的 UI 交互。通过简单的单击进行的交互可以正常工作(QTest::mouseClick()),但通过双击进行的交互则不行(QTest::mouseDClick())。

这是重现问题的简化代码示例:

对话.h

对话框.cpp

和测试类:

我手动检查了对话框,并按预期调用了该插槽。

0 投票
1 回答
848 浏览

c++ - Qt 测试模拟动态链接库

我有点困惑如何使用模拟和动态链接库。让我们假设一个项目结构如下

“应用程序”正在使用库;该库在 test_lib 项目中进行了测试。

现在我想测试应用程序,但我不想再次测试整个 lib 的东西(这是愚蠢的,不费吹灰之力的双重工作!)。所以我需要一些方法来模拟整个库。有没有人以前在 Qt 中做过这个并且可以帮助我?这可能在 Qt 测试框架内吗?我已经阅读了很多文章和 SO 问题,但我没有找到任何解决这个特殊问题的方法。

我使用基于 Qt 5.6.1 的 Qt Creator 4.0.3、带有 mscv2013 的 qmake 和包含的 Qt 测试框架。

0 投票
0 回答
709 浏览

qt - 如何避免 Qt 测试在 600 秒后超时

是否可以在 Qt 测试中忽略 600 秒的 MAX_VALUE?我尝试:

但结果是:

因此可以将超时时间从 300 秒增加到 600 秒。问题是,在一种情况下我需要 800 秒,我怎么能意识到这一点?

将超时设置为 Qt 测试

0 投票
0 回答
446 浏览

qt - Qt Creator:在主项目之前自动运行单元测试

我在 Qt 5.9.3 上有一些小部件应用程序项目。现在对于单元测试,我创建了一个新的根“子目录”项目,其中包含我的主应用程序项目和新的Qt 测试项目

在此处输入图像描述

注意 - 我如何使用现有项目创建根解决方案文件夹:

  1. 在 Qt 创建者中:文件 -> 新建文件或项目 -> 其他项目 -> 子目录项目
  2. 如何向其中添加现有项目:在子目录项目的 .pro 文件中附加我现有的项目名称并将现有项目的文件夹复制到解决方案文件夹。
  3. 通过 File -> New File or Project -> Other Projects -> Qt Unit Test -> Next -> ... -> Add as subproject to project 'my_solution'.pro 创建新的测试项目。

.pro 子目录

文件夹

现在我需要在主应用程序启动之前自动运行测试项目。如何在Qt Creator (4.4.1) 中做到这一点?我现在在解决方案项目设置中拥有的内容:

在此处输入图像描述

在此处输入图像描述

有任何想法吗?是否可以依次完成两个这样的任务?如何在 Qt Creator 中自动启动单元测试?