- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 QTestLib framework 在 QTableView 中为自定义验证器编写单元测试。最基本的测试用例之一可以这样描述:
Double click the table cell in the third column and the fourth row, and append the number '5' to its content.
仅仅更改模型中的值或其他内容是不够的,测试用例应像这样执行:
注:This question有关于如何从代码将表格单元格设置为编辑模式的答案,但是单元测试应尝试坚持人类用户的可能性,即鼠标/键盘操作。
我发现可以使用 QTableView::columnViewportPosition( int ) 检索单元格的 X/Y 位置和 QTableView::rowViewportPosition( int ) 。但是,使用 QTest::mouseDClick(...) 双击指定位置既不选择单元格也不将其设置为编辑模式:
// Retrieve X/Y coordinates of the cell in the third column and the fourth row
int xPos = m_pTableView->columnViewportPosition( 2 );
int yPos = m_pTableView->rowViewportPosition( 3 );
// This does not work
QTest::mouseDClick( m_pTableView, Qt::LeftButton, QPoint( xPos, yPos ) );
如何仅使用鼠标/键盘操作来实现上面描述的测试用例?
PS:我在 Windows XP 32 位和 Qt 4.6.1 下尝试此操作
最佳答案
尝试通过模拟事件在 QTableView 中进行编辑时需要考虑以下几点:
QTableView 不直接显示其单元格,而是使用其 viewport() 来显示其单元格。 。同样,双击事件必须发送到视口(viewport)而不是 TableView 本身。
现在当你这样做
QTest::mouseDClick( m_pTableView->viewport(), Qt::LeftButton,
NULL, QPoint( xPos, yPos ) );
单元格将被选择,但不会处于编辑模式(与人为启动的双击不同,即使表格 View 之前没有焦点,也会立即将单元格置于编辑模式)。但是,如果您在双击之前在同一位置添加单击,那么它将起作用!
如果您随后将 [End] 按键发送到视口(viewport),光标将不会跳转到表格单元格内容的末尾,而是会选择当前行中的最后一个单元格。
为了更改表格单元格内容,您必须将事件发送到当前编辑器小部件。最简单的方法是使用 QWidget::focusWidget()
QTest::keyClick( m_pTableView->viewport()->focusWidget(), Qt::Key_End );
请注意,尽管 focusWidget() 可能返回 NULL,但这样使用可能不安全。
<小时/>有了这些知识,测试用例就可以编写如下:
// Note: The table view must be visible at this point
// Retrieve X/Y coordinates of the cell in the third column and the fourth row
int xPos = m_pTableView->columnViewportPosition( 2 ) + 5;
int yPos = m_pTableView->rowViewportPosition( 3 ) + 10;
// Retrieve the viewport of the table view
QWidget* pViewport = m_pTableView->viewport();
// Double click the table cell to set it into editor mode
// Note: A simple double click did not work, Click->Double Click works, however
QTest::mouseClick ( pViewport, Qt::LeftButton, NULL, QPoint( xPos, yPos ) );
QTest::mouseDClick( pViewport, Qt::LeftButton, NULL, QPoint( xPos, yPos ) );
// Simulate [End] keypress
QTest::keyClick( pViewport->focusWidget(), Qt::Key_End );
// Simulate [5] keypress
QTest::keyClick( pViewport->focusWidget(), Qt::Key_5 );
(注意:如果您想验证这一点,可以在每个事件后添加 QTest::qWait( 1000 ) 命令)
<小时/>如果您按照描述使用 _data() 函数 here ,请注意,您无法在创建数据时检索 focusWidget()。我通过创建一个仅包含纯虚拟“execute()”函数的自定义接口(interface) ITestAction
解决了这个问题。然后,我添加了具有与 QTest::mouseClick(...) 等函数类似的构造函数的子类。这些类只是调用 QTest 函数,但使用小部件本身或其焦点小部件作为参数,具体取决于附加的 bool 标志。然后,_data() 槽为每个数据行存储一个 QList< ITestAction* >,实际的测试槽会迭代该列表,并在执行验证之前对每个项目调用execute()。
关于qt - 如何从 QTest 单元测试编辑 QTableView 单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12604739/
我正在尝试使用QTest进行一些测试。我有一个QListWidget,我想单击以获取选择。但是单击之后,什么也没有选择。有人有什么想法吗? 这是我的考试课 void TestGui::List() {
在 Qt 单元测试中,程序如何检索正在运行的测试的名称? 代码看起来像这样: #include class MyTest : public QObject { Q_OBJECT privat
我正在使用 Qt 5.3.2 的 QTest 对类执行一些单元测试。我正在使用 VS2013 Express 来构建测试器。 VS 项目文件是使用 qmake 从 .pro 文件生成的。为了运行测试,
在单元测试中,我尝试发送键盘快捷键 Command+N(在 Mac OS 上),它对应于我的应用程序中的菜单项。我正在使用 PySide.QtTest 模块。 在下面的代码中,我使用了 QTest.k
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
你能比较流行的 C++ 单元测试框架和 Qt 的 QTest 吗? (cppunit、boost 测试、google 测试等。) 有什么优点缺点?谢谢。 注意:GUI测试对我们来说不是很重要。 最佳答
我有一个子项目,我将所有 QTest 单元测试放在其中,并构建一个运行测试的独立测试应用程序(即我从 Qt Creator 中运行它)。我有多个可以使用 qExec() 执行的测试类。但是我不知道执行
我刚开始使用 QT,希望进行单元测试。我找到了支持在我的应用程序外部进行测试的项目结构蓝图。 对于我的第一个测试,我想单击“退出”菜单点,检查 QMainWindow 的关闭操作是否真的被调用。 来自
我有一个小的测试程序,它通过我编写的库与服务器后端对话。该测试使用 QTest 框架并运行了一堆测试用例。在我的所有测试运行后,最新版本的测试程序开始出现段错误。输出类似于: ********* St
我尝试使用简单的序列测试拖放:mousePress + mouseMove + mouseRelease。但它不起作用。 我调查了 qtest 源,发现通过主调度程序 processEvent() 测
首先,我知道这个论坛中有非常相似的问题。但是,没有人能真正回答我的具体情况。 我有以下项目结构: |---Project_Root |---CMakeLists.txt |---bui
我正在创建一些自动化 GUI 测试 在我的应用程序中使用 QTest . 我可以使用以下命令从我的应用程序访问小部件: savePushButton = mainWindow->findChild("
我有一个 QT 应用程序,我想用 QTest 测试它。简要介绍一下我想做什么:我有一个主窗口,按钮 Settings 位于其中。如果我点击这个按钮,就会出现 QDialog。我想测试这是否真的发生了
我想在我的代码中使用 QTest 宏 QCOMPARE,但我收到错误。 QTestString.h #ifndef QTESTSTRING_H #define QTESTSTRING_H #inclu
这是我的代码: from PySide import QtCore, QtGui, QtTest import sys application = QtGui.QApplication(sys.arg
我正在使用 Qt 中的 QTest 编写一些单元测试。我还遇到了 QBENCHMARK 宏,它对其封装的代码进行基准测试。 我正在运行我的单元测试并对一些代码进行基准测试。 QBENCHMARK 报告
我第一次在 QtCreator 中进行单元测试,我想知道如何测试没有返回类型的函数。喜欢: rgb_process.h: class RGB_process : Process { public:
我对 Qt 很陌生,我需要使用 QTest 模拟点击命名空间和 QTest::mouseClick .我的问题是我想点击 QMenu条目,定义为 QAction ,但 mouseClick函数不允许我
我正在使用 QTestLib framework 在 QTableView 中为自定义验证器编写单元测试。最基本的测试用例之一可以这样描述: Double click the table cell i
我正在使用 QTestLib 库和 QTest 来运行我的单元测试。我在 Windows 7 上工作,并使用 Qt 4.8 和 MVSC 2010 编译器。当我使用以下方式运行测试时: QTest::
我是一名优秀的程序员,十分优秀!