标签: qtestlib

将QTest与其他框架进行比较

你能比较C++的热门单元测试框架和Qt的QTest吗?

(cppunit,加强测试,谷歌测试等..)

缺点有哪些优点?谢谢.

注意:GUI测试对我们来说不是很重要.

c++ cppunit googletest boost-test qtestlib

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

QTestlib单元测试项目,用于访问QTCreator中主项目中的类

我正在使用QT Creator并希望在单独的项目中运行我的单元测试.如何从我的测试项目中引用主项目中的类?

qt-creator qtestlib

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

QTest:可以测试拖放吗?

我尝试使用简单的亮片来测试拖放:mousePress + mouseMove + mouseRelease。但这是行不通的。

我研究了qtest的源,发现通过主调度程序processEvent()测试了该移动事件。此外,我发现QT的bug跟踪器的一些错误:12

因此,我认为不可能在最新的稳定Qt4下测试拖放。有谁成功的故事吗?

qt unit-testing qtestlib

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

如何在QAction中使用QTest :: mouseClick

我对Qt非常陌生,我需要使用QTest命名空间和来模拟点击QTest::mouseClick。我的问题是我想单击QMenu定义为的条目,QAction但是该mouseClick函数不允许我将其作为参数传递(仅QWidgetsQWindows)。

我在这里可以做什么?

qt qtestlib qmenu qaction

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

PyQt5:QWebEngineView中的mouseClick和源代码

我有一个使用PyQt-5.5.1的工作脚本,我现在想要移植到一个新的PyQt版本(5.7).适应大多数事情很好,但我面临两个主要问题:(1)执行(模拟)鼠标点击,(2)访问(假设:打印)当前显示的网页的html源代码分别是QWebView或QWebEngineView.

例如,我可以使用PyQt-5.5.1中的QWebView执行以下操作:

QTest.mouseClick(self.wvTest, Qt.LeftButton, QPoint(x, y))
Run Code Online (Sandbox Code Playgroud)

frame = self.wvTest.page().mainFrame()
print(frame.toHtml().encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)

我知道有关移植到QWebEngineView但无法将C++表示法转换为可用的Python代码的文档以及此页面.

如何在PyQt-5.7中将其改编为QWebEngineView?下面是PyQt-5.5.1的一个完整工作片段,它对于新的PyQt版本失败了:

  • 对于Button1:根本没有鼠标点击反应.
  • 对于Button2:,AttributeError: 'QWebEnginePage' object has no attribute 'mainFrame'当我删除大型机()时:TypeError: toHtml(self, Callable[..., None]): not enough arguments.

import sys
from PyQt5.QtWidgets import QWidget, QPushButton, QApplication
from PyQt5.QtCore import QRect, Qt, QUrl, QPoint, QEvent
from PyQt5.QtTest import QTest
from PyQt5.Qt import PYQT_VERSION_STR

if PYQT_VERSION_STR=='5.5.1': from PyQt5 import QtWebKitWidgets else: from PyQt5 import QtWebEngineWidgets

class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.button1 = …
Run Code Online (Sandbox Code Playgroud)

python qtwebkit qtestlib pyqt5 qtwebengine

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

Qt Creator单元测试项目

在Qt Creator中,当我创建一个新的Unit Test项目时,如果项目的完整路径包含空格,它将无法成功构建.

我已经将错误跟踪到qmake生成的makefile.makefile包含一条靠近顶部的行,如:

DEFINES = -DUNICODE -DWIN32 -DSRCDIR=\"C:/Users/Smith/Qt Projects/Unit_Tests/\" -DQT_QML_DEBUG -DQT_DECLARATIVE_DEBUG -DQT_TESTLIB_LIB -DQT_CORE_LIB -DQT_TESTCASE_BUILDDIR=\"C:/Users/Smith/Qt Projects/Debug_Unit_Tests\"
Run Code Online (Sandbox Code Playgroud)

SRCDIR和的值中的引号QT_TESTCASE_BUILDDIR用反斜杠转义.如果我从中删除反斜杠Makefile.Debug,那么项目将成功构建.

显然,我不希望每次都手动删除反斜杠.我还想避免一个删除反斜杠的自定义构建步骤.因为qmake有很多选项,所以我希望有一些东西可以放在.pro文件中来解决这个问题.

我试过类似的东西DEFINES -= QT_TESTCASE_BUILDDIR.然而,这不起作用,因为QT_TESTCASE_BUILDDIR尚未定义. testlib显然后来添加了自己的定义.

我在用:

  • Visual Studio 2010 SP 1
  • Qt 5.0.2
  • Qt Creator 2.7.0
  • Windows 7的

什么是摆脱反斜杠最简单的方法?

编辑:这也发生在OSX上.

qt unit-testing qt-creator qtestlib

4
推荐指数
1
解决办法
2186
查看次数

如何从 QTestLib/QTest 获取有关测试失败的信息

我正在使用 QTestLib 库和 QTest 来运行我的单元测试。我正在 Windows 7 上工作,并在 MVSC 2010 编译器中使用 Qt 4.8。当我使用以下方法运行测试时:

QTest::qExec(TestDateDD/whateverTestClass);
Run Code Online (Sandbox Code Playgroud)

我在控制台中得到输出:

********* Start testing of TestDateDD *********
    Config: Using QTest library 4.8.0, Qt 4.8.0
    PASS   : TestDateDD::initTestCase()
    PASS   : TestDateDD::testValidity()
    FAIL!  : TestDateDD::testMonth(2012/7/10) Compared values are not the same
    Actual (date.longMonthName(date.month())): July
    Expected (monthname): June
    ..\UnitTestingPlugiin\TestDateDD.cpp(38) : failure location
    PASS   : TestDateDD::cleanupTestCase()
    Totals: 3 passed, 1 failed, 0 skipped
    ********* Finished testing of TestDateDD *********
Run Code Online (Sandbox Code Playgroud)

但是,我的要求是在我的 GUI 中为每个测试槽显示此消息。我做了一些研究,发现qtestlog.cpp使用它自己的messageHandler来管理测试输出并将结果显示为 PASS 或 FAIL 以及失败消息、行号等。 …

qt unit-testing qtestlib

3
推荐指数
1
解决办法
2028
查看次数

如何通过QTest访问QMessageBox

我正在使用QTest在应用程序中创建一些自动化的GUI测试

我可以使用以下命令从应用程序中访问小部件:

savePushButton = mainWindow->findChild<QPushButton *>("savePushButton");
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是现在我必须单击QMessageBox的“确定”按钮。

我在应用程序中创建了QMessageBox,如下所示:

if( something_wrong )
{
    QMessageBox::warning(new Widget(), "Title", "Something wrong!");
}
Run Code Online (Sandbox Code Playgroud)

我如何访问此QMessageBox及其按钮?

qt qwidget qtestlib qmessagebox

3
推荐指数
1
解决办法
934
查看次数

Qtestlib:QNetworkRequest未执行

我想测试一个Web服务器的异步请求.为此,我正在创建一个简单的单元测试来快速尝试几行代码:

void AsynchronousCall::testGet()
{
    QNetworkAccessManager *nam =  new QNetworkAccessManager(this);

    QUrl url("http://myownhttpserver.org");
    QNetworkRequest req(url);


    this->connect(nam, SIGNAL(finished(QNetworkReply*)), this, SLOT(reqFinished(QNetworkReply *)));
    QNetworkReply *rep = nam->get(req);

}

void AsynchronousCall::reqFinished(QNetworkReply *rep)
{
    qDebug() << rep->readAll();
    qDebug() << "finshed";
}
Run Code Online (Sandbox Code Playgroud)

问题是永远不会达到reqFinished().如果我有一个简单的QEventLoop和一个loop.exec()就在nam-> get(req)之后; 请求被执行.

任何提示?我是否必须在每个单元测试中使用loop.exec()?

qt qnetworkaccessmanager qtestlib

2
推荐指数
1
解决办法
2389
查看次数

Qt测试QVERIFY2()字符串和int连接

抱歉标题不好,我不知道如何标题这个问题.请编辑并使其更好.

我正在使用Qt测试框架编写测试,我正在尝试编写一些有用的输出供QVERIFY2()宏使用.所有以下语句都无法使用大致相同的错误消息进行编译:

QVERIFY2( spy.count() == 1, "Emitted signal pathChanged() was emitted " + spy.count() + " times instead of 1 time" );
QVERIFY2( spy.count() == 1, QString( "Emitted signal pathChanged() was emitted " ) + QString( spy.count() ) + QString( " times instead of 1 time" ) );
QVERIFY2( spy.count() == 1, "Emitted signal pathChanged() was emitted " + QString( spy.count() ) + " times instead of 1 time" );
Run Code Online (Sandbox Code Playgroud)

上次尝试的错误消息是:

PathTester.cxx: In member function ‘void PathTester::testReservePath()’:
PathTester.cxx:241:128: …
Run Code Online (Sandbox Code Playgroud)

c++ qt unit-testing qt4 qtestlib

2
推荐指数
1
解决办法
2144
查看次数

如何在QSignalSpy上使用foreach循环

我如何使用foreach循环QSignalSpy

这就是我想要做的:

foreach( const QList<QVariant> &args, mySignalSpy )
{
    Q_ASSERT( args.count() == 2 );
    QVariant arg0 = args[0];
    QVariant arg1 = args[1];
    doSomething( arg0, arg1 );
}
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

/usr/local/Trolltech/Qt-4.8.2-shared/include/QtTest/qsignalspy.h: In instantiation of ‘QForeachContainer<T>::QForeachContainer(const T&) [with T = QSignalSpy]’:
MyTester.cxx:843:64:   required from here
/usr/local/Trolltech/Qt-4.8.2-shared/include/QtCore/qobject.h:333:5: error: ‘QObject::QObject(const QObject&)’ is private
Run Code Online (Sandbox Code Playgroud)

c++ foreach qt qt4 qtestlib

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

QTest mouseClick一个QPushButton

我尝试使用QTest命名空间的mouseClick函数单击QPushButton.QPushButton是Widget的私有成员.单击期间鼠标光标的位置位于按钮的中心,但是没有单击按钮...有人可以解释一下为什么?

MyWidget *myWidget= new myWidget();

myWidget->show();

while ( !myWidget->isVisible() ) {
     QTest::qWait(200);
}

QTest::qWait(500);
QTest::mouseMove ( myWidget, QPoint( 70, 100 ), -1 );
QTest::mouseClick ( myWidget, Qt::LeftButton, Qt::NoModifier, QPoint( 70, 100 ), 100);
Run Code Online (Sandbox Code Playgroud)

谢谢

qt qtestlib

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