用我自己的班级测试信号

时间:2017-12-01 21:48:53

标签: qt unit-testing qsignalspy

我有一些课程可以与另一个班级发出一些信号。例如:

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的单元测试信号吗?

1 个答案:

答案 0 :(得分:0)

我太棒了,这是我的坏事。 我使用间谍的takeFirst()方法。此后,间谍的目标再也没有信号了。