我有一些课程可以与另一个班级发出一些信号。例如:
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()测试信号emitor QDEBUG: CTestCommandProcessor :: testS()计数:1 QDEBUG: CTestCommandProcessor :: testS()Vals:QVariant(CMyClass,)崩溃 发生在 C:\单元测试\集结单元测试,Qt_5_7_1_5_7_1_Static释\发布\ UnitTest.exe。 功能时间:0ms总时间:0ms
我试图改变字符串:
CMyClass buf = qvariant_cast&lt; CMyClass&gt;(spy.at(0).at(0));
到
CMyClass buf = qvariant_cast&lt; const CMyClass&amp; &GT;(spy.at(0)。在(0));
但是,我得到了同样的错误。 怎么了?我可以在我自己的课程中使用Qt的单元测试信号吗?
答案 0 :(得分:0)
我太棒了,这是我的坏事。 我使用间谍的takeFirst()方法。此后,间谍的目标再也没有信号了。