【发布时间】:2016-02-19 15:52:26
【问题描述】:
我目前正在测试一个 Qt 应用程序。我必须构建一个测试来检查 csv 文件的正确输入和输出。
问题:
正在异步读取数据,我的测试程序在加载数据之前结束,这是我得到的输出。
QFATAL: Received signal 11
FAIL! : Received a fatal error
程序流程:
有一个类 AsyncLoader 加载数据。数据读取完成后,会发出 completed() 信号。
因此,我修改了测试程序以包含QEventLoop。代码如下所示
#pragma once
#include <QEventLoop>
#include <QSignalSpy>
#include "asyncloader.h"
#include "alphaevent.h"
#include "mainwindow.h"
#include <QtTest/QtTest>
class Test1: public QObject
{
Q_OBJECT
private slots:
void initTestCase();
void mainWindowTester();
void cleanupTestCase();
};
void Test1::initTestCase()
{
qDebug()<<"hello";
}
void Test1::mainWindowTester()
{
AlphaEvent *fs1 = new AlphaEvent(this);
fs1->setOperation(AlphaEvent::FileOpen);
fs1->setPath(QString("/home/user/PC5.csv"));
MainWindow *mw1 = new MainWindow();
QEventLoop loop;
loop.connect(mw1, SIGNAL(completed(FileEvent*)), SLOT(quit()));
mw1->dataSetIORequest(fs1);
loop.exec();
int pqr = mw1->_package->dataSet->rowCount();
int pqr1 = mw1->_package->dataSet->columnCount();
qDebug() << "pqr== "<< pqr;
qDebug() << "-----------------------------------------------";
QVERIFY(pqr==5);
void Test1::cleanupTestCase()
{
}
QTEST_MAIN(Test1)
#include "test1.moc"
但是有了这个,我得到一个“子进程错误:FailedToStart”
有没有办法测试异步单元?
我使用的是 Qt 5.4.2 版,QMake 3.0 版
【问题讨论】:
-
你会考虑使用像 gtest 这样的单元测试框架吗?
-
@gda2004,我之前没有尝试将 google-test 与 qt-application 一起使用。如果这不起作用,会试一试
-
@askshrajkn 我目前正在将 gtest 与 qt 框架一起使用,您只需重构代码,以便插槽是对函数或方法的最小调用。然后您可以使用 gtest 编写测试。它可能会帮助您找出问题所在。
-
@gda2004 你能给我一些资源或例子吗?需要这个插件(github.com/OneMoreGres/qtc-gtest)吗? [我是单元测试新手,请多多包涵]
-
@askshrajkn ibm.com/developerworks/aix/library/… 。我只是将参数转发给一个函数,以便我可以从 gtest 中注入它们
标签: c++ qt unit-testing qtestlib qttest