2017-12-01 3 views
0

私は別のクラスで何らかの信号を出力できるクラスがあります。例:自分のクラスのテスト信号

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 ::テスト()テスト信号emitor QDEBUG: CTestCommandProcessor ::テスト()数:1 QDEBUG: CTestCommandProcessor ::テスト()ヴァルス:QVariant(CMyClassを) C:\ UnitTest \ build-UnitTest-Qt_5_7_1_5_7_1_Static-Release \ release \ UnitTest.exeに、 というクラッシュが発生しました( )。 関数時間:0msと合計時間:0msと

私は、文字列を変更しようとしました:

CMyClass BUF = qvariant_cast < CMyClass>(spy.at(0).AT(0));

CMyClass BUF = qvariant_cast < CONST CMyClass &>(spy.at(0).AT(0))。

しかし、同じエラーが発生していました。 どうしたのですか?自分のクラスでQtのユニットテスト信号を使うことはできますか?

+0

あなたは完全なコードを投稿できますか? あなたの例では、 'CMyClass'に対して' test() 'を呼びますが、' CMyClass'にはそのようなメソッドはありません。 また、貼り付けた2行: 'CMyClass buf = qvariant_cast(spy.at(0).at(0));'は全く同じです。 – Atlante45

+0

申し訳ありません。投稿されたフルコード。 – Mike

+0

スタックトレースはどこですか? – MrEricSir

答えて

0

私はとてもソーリーです、これは私の悪です。 私はスパイのtakeFirst()メソッドを使用しました。その後、スパイのオブジェクトには信号がありません。

関連する問題