标签: qtestlib

问:我如何获得当前运行的窗口?

我正在编写一个模拟按键的测试应用程序,我想在每次按键后显示什么窗口.这是代码块.

std::auto_ptr<MyForm> pForm(new MyForm(3,3)); 
QTest::keyPress(pForm.get(), Qt::Key_0); 
Run Code Online (Sandbox Code Playgroud)

在这里按0后,会出现一个窗口,我想查看它是什么窗口,以便我可以稍后进行QCompare /评估.

有任何想法吗?

更新:

我使用时遇到分段错误

std::auto_ptr<MyForm> pForm(new MyForm(3,3)); 
QTest::keyPress(pForm.get(), Qt::Key_0); 
QWidget *pWin = QApplication::activeWindow();
QCOMPARE(pWin->windowTitle(), QString("My Second Menu"));
Run Code Online (Sandbox Code Playgroud)

c++ user-interface qt unit-testing qtestlib

7
推荐指数
1
解决办法
1万
查看次数

在QListWidget上QTest :: mouseClick的问题

我正在尝试使用QTest进行一些测试.我有一个QListWidget,我想点击它来获取选择.但点击后,没有选择任何内容.有没有人有任何想法?

这是我的测试课

void TestGui::List() {
    TestDialog dlg;
    dlg.show ();

    // Click on the centre of the second object
    QListWidget *list = dlg.ListWidget ();
    QListWidgetItem *item = list->item ( 1 );
    QRect rect = list->visualItemRect ( item );
    QTest::mouseClick ( list, Qt::LeftButton, 0, rect.center() );

    // Check if something was selected
    QCOMPARE ( list->currentRow (), 1 );
    QVERIFY ( list->currentItem () != NULL );
    QCOMPARE ( list->currentItem ()->text (), QString ( "Two" ) );
}
Run Code Online (Sandbox Code Playgroud)

以下是测试类

class TestGui: public QObject { …
Run Code Online (Sandbox Code Playgroud)

qtestlib

7
推荐指数
1
解决办法
1188
查看次数

如何在使用单个测试项目时将所有QtTestLib单元测试结果组合在一个文件中?

在我们的项目中,我们使用QtTestLib进行单元测试.原因是整个项目在可能的情况下已经使用Qt并且它是一个GUI应用程序,因此我们希望能够测试GUI界面.

我们的项目是由MSVC编译的,所以我们不希望每个测试都有一个单独的项目文件,因为它会使解决方案变得混乱.因此,我们为所有测试创建了一个项目.所有测试都应该在CIS上自动进行(持续集成),因此我们尝试使用一些XSLT转换通过XML格式的输出文件将测试插入Hudson.

但似乎测试输出存在问题.如果对所有测试使用单个main(),并且仅向每个测试传输cmd行参数:

#include "MyFirstTest.h"
#include "MySecondTest.h"

int main(int argc, char **argv)
{
  int result = 0;
  MyFirstTest test1;
  result |= QTest::qExec(&test1, argc, argv);
  MySecondTest test2;
  result |= QTest::qExec(&test2, argc, argv);
  return result;
}
Run Code Online (Sandbox Code Playgroud)

然后你会得到一个多次重写的结果文件.因此,如果您想使用输出文件(例如xml)稍微自动化它,您将只获得其中的最后结果.所有其他都将被覆盖.

我们已经尝试过这种方法,它不能让你使用像Hudson这样的连续集成系统.所以我的问题是:有没有机会在一个输出文件中附加结果?当然,我们可以使用一些解决方法,例如通过QTest :: qExec()运行每个测试,并使用修改后的参数将结果写入单独的文件,但这似乎不是最好的方法.理想情况下,我希望有一个结果文件与CIS一起使用.

c++ qt qttest qtestlib

6
推荐指数
1
解决办法
2653
查看次数

如何从QTest单元测试中编辑QTableView单元?

我正在使用QTestLib框架在QTableView中为自定义Validator编写单元测试.最基本的测试用例之一可以这样描述:

双击第三列和第四行中的表格单元格,并在其内容中附加数字"5".

仅仅改变模型中的值或任何东西是不够的,测试用例应该像这样执行:

  1. 双击表格单元格将其设置为编辑模式
  2. 按[结束]键.
  3. 按[5]键.

注意:这个问题有一个关于如何从代码中将表格单元格设置为编辑模式的答案,但是单元测试应该尝试坚持人类用户的可能性,即鼠标/键盘操作.

我发现可以使用QTableView :: columnViewportPosition(int)QTableView :: rowViewportPosition(int)检索单元格的X/Y位置.但是,使用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 ) );
Run Code Online (Sandbox Code Playgroud)

如何使用鼠标/键盘操作实现上述测试用例?

PS:我在Windows XP 32位和Qt 4.6.1下尝试这个

qt qt4 qtableview qtestlib qt4.6

6
推荐指数
1
解决办法
1893
查看次数

QCompare的未定义符号

使用QTestLib构建测试时,我得到一个qCompare函数的"未定义符号"错误:

Undefined symbols for architecture x86_64:
  "__ZN5QTest8qCompareIimEEbRKT_RKT0_PKcS8_S8_i", referenced from:
      __ZN15MyTestClass22myTestFunctionEv in MyTestClass.o
Run Code Online (Sandbox Code Playgroud)

qt qtestlib

6
推荐指数
1
解决办法
1802
查看次数

如何使用QTest QBENCHMARK宏作为单元测试中的参数

我正在Qt中使用QTest编写一些单元测试.我还遇到了QBENCHMARK宏,它对它封装的代码进行了基准测试.

我正在运行我的单元测试并对一些代码进行基准测试.QBENCHMARK报告执行某些方法需要多长时间,这很好.我想在单元测试中使用执行时间,例如QVERIFY2().我怎样才能做到这一点?

编辑:

我目前正在做的是:

void UnitTest::benchmark()
{
    QString str1 = QLatin1String("This is a test string");
    QString str2 = QLatin1String("This is a test string");

    QCOMPARE(str1.localeAwareCompare(str2), 0);

    QBENCHMARK {
        str1.localeAwareCompare(str2);
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ macros qt unit-testing qtestlib

6
推荐指数
1
解决办法
1656
查看次数

QSignalSpy 不能与线程一起使用

我写了一个执行工作对象的线程。一切正常。结果信号也按应有的方式发出。当然,我处理了有关线程/对象关联性的常见错误。

今天我为这些工作线程/线程编写了一个自动化模块测试。我创建了一个 QSignalSpy 来等待工作对象(已移动到线程)发出的信号,如下所示:

QSignalSpy spy(worker, SIGNAL(Success()));
thread.ExecuteWorker();
QVERIFY(spy.wait()); // Error in this line
Run Code Online (Sandbox Code Playgroud)

我在标记行中收到一个众所周知的错误:

QObject::killTimer: timers cannot be stopped from another thread
Run Code Online (Sandbox Code Playgroud)

首先,我预计会出现错误,因为 wait() 中的某些代码在错误的线程中执行。然后我在QSignalSpy的实现中发现了如下代码:

if (!QMetaObject::connect(obj, sigIndex, this, memberOffset, Qt::DirectConnection, 0))
{
   qWarning("QSignalSpy: QMetaObject::connect returned false. Unable to connect.");
   return;
}
Run Code Online (Sandbox Code Playgroud)

这显然意味着 QSignalSpy 一直使用 DirectConnection 并且不能用于监视生活在不同线程中的对象的信号。

为什么他们在 Qt5.3 中这样编程?这是一个错误还是有意的行为?我该如何解决这个限制?

c++ qt qthread qtestlib qsignalspy

6
推荐指数
1
解决办法
1893
查看次数

如何使用QTestLib模拟鼠标滚轮事件[Qt5]

我很高兴QTestLib为基于小部件的 UI 编写测试Qt5。直到现在,当我试图找到一种模拟鼠标滚轮事件的方法时,似乎并不缺乏特性和便利功能。

我已经查看了官方文档官方示例,但我似乎不知道如何模拟鼠标滚轮事件。

这不存在吗?或者我错过了什么?我应该如何使用创建虚拟鼠标滚轮事件QTestLib

qt mouseevent mousewheel qtestlib qt5

6
推荐指数
1
解决办法
1045
查看次数

q等待 PySide 中的类似物?

我使用 QTest 和 unittest 在 PyQt 中编写了一系列单元测试。我的代码传递信号,因此为了确保在测试之前操作后经过了足够的时间,我添加了一些 qWaits。

APP.ui.serverPortEdit.setText('1234')
QTest.mouseClick(APP.ui.userConnectButton, Qt.LeftButton)
QTest.qWait(2000) #wait for the server to connect
self.checkOnline()
Run Code Online (Sandbox Code Playgroud)

我想在 PySide 中运行相同的测试,但我找不到 qWait 的类似物。我是不是忽略了什么?PySide qTest 文档没有提及它。

pyqt pyside qtestlib

5
推荐指数
1
解决办法
1317
查看次数

如何使用单点登录凭据进行 QTest Rest API 访问

我正在使用 QTest API 进行自动化。我使用带有用户名/密码的登录 API 进行身份验证,获取不记名令牌,并将该令牌用于下一个 API 调用。

在此输入图像描述

但如果我在同一个 API 中使用 SSO 凭据(用户名/密码),则会出现错误

在此输入图像描述

我想以编程方式使用 SSO 凭据或 SAML 响应来进行身份验证并获取访问令牌。有没有办法使用 SSO 凭证或 SAML 响应来使用 Postman 获取不记名令牌?

有任何技术文档可以帮助我吗?

Qtest 是否提供任何机制来使用 SSO 凭证以编程方式获取不记名令牌?

qtestlib single-sign-on qtest

5
推荐指数
1
解决办法
188
查看次数