【发布时间】:2017-12-01 21:48:53
【问题描述】:
我有一个班级可以与我的另一个班级发出一些信号。示例:
class CMyClass : public QBytaArray
{
void SomeAction();
}
class CMainClass : public QObject
{
signals:
void testSignal(const CMyClass &myClass);
public:
void test() {
CMyClass data;
emit testSignal(data);
}
}
我为 CMainClass 编写了 unix 测试:
标题:
#ifndef TESTMAINCLASS_H
#define TESTMAINCLASS_H
#include <QObject>
#include <QSignalSpy>
#include "MainClass.h"
Q_DECLARE_METATYPE(CMyClass)
class CTestMainClass : public QObject
{
Q_OBJECT
public:
explicit CTestMainClass(QObject *parent = 0);
private slots:
void testS();
};
#endif // TESTMAINCLASS_H
来源:
#include <QDebug>
#include "TestMainClass.h"
CTestMainClass::CTestMainClass(QObject *parent) : QObject(parent)
{
qRegisterMetaType<CMyClass>();
}
void CTestMainClass::testS()
{
qDebug() << "Test signal emitor";
CMainClass prc;
QSignalSpy spy(&prc, SIGNAL(testSignal(const CMyClass&)));
prc.test();
CMyClass buf = qvariant_cast<CMyClass>(spy.at(0).at(0));
}
但是,在日志文件中我有:
PASS : CTestCommandProcessor::initTestCase() QDEBUG : CTestCommandProcessor::testS() 测试信号发射器 QDEBUG : CTestCommandProcessor::testS() 计数:1 QDEBUG : CTestCommandProcessor::testS() Vals: QVariant(CMyClass, ) 崩溃 发生在 C:\UnitTest\build-UnitTest-Qt_5_7_1_5_7_1_Static-Release\release\UnitTest.exe。 函数时间:0ms 总时间:0ms
我试图改变字符串:
CMyClass buf = qvariant_cast(spy.at(0).at(0));
到
CMyClass buf = qvariant_cast(spy.at(0).at(0));
但是,我遇到了同样的错误。 怎么了?我可以在自己的类中使用 Qt 的 unittest 信号吗?
【问题讨论】:
-
你能发布完整的代码吗?在您的示例中,您在
CMyClass上调用test(),但CMyClass没有这种方法。此外,您粘贴的 2 行:CMyClass buf = qvariant_cast(spy.at(0).at(0));完全相同。 -
对不起。发布完整代码。
-
堆栈跟踪在哪里?
-
如何获取堆栈跟踪?
标签: qt unit-testing qsignalspy