Тестовый сигнал с моим собственным классом

У меня есть некоторый класс, который может излучать некоторый сигнал с другим моим классом. Пример:

class CMyClass : public QBytaArray
{
    void SomeAction();
}

class CMainClass : public QObject
{
    signals:
        void testSignal(const CMyClass &myClass);

    public:
        void test() {
          CMyClass data;  
          emit testSignal(data);
        }
}

Я написал тест Unix для CMainClass:

заголовок:

#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 in A):\UnitTest\ встроенный UnitTest-Qt_5_7_1_5_7_1_Static-релиз \ релиз \UnitTest.exe. Время функции: 0 мс Общее время: 0 мс

Я пытался изменить строку:

CMyClass buf = qvariant_cast(spy.at(0).at(0));

в

CMyClass buf = qvariant_cast(spy.at(0).at(0));

Но я получаю ту же ошибку. Что случилось? Могу ли я использовать в единицах измерения Qt свои собственные классы?

1 ответ

Мне так жаль, это мое плохо. Я использовал метод takeFirst() шпиона. И после этого объекта шпиона больше нет сигналов.

Другие вопросы по тегам