私は別のクラスで何らかの信号を出力できるクラスがあります。例:自分のクラスのテスト信号
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のユニットテスト信号を使うことはできますか?
あなたは完全なコードを投稿できますか? あなたの例では、 'CMyClass'に対して' test() 'を呼びますが、' CMyClass'にはそのようなメソッドはありません。 また、貼り付けた2行: 'CMyClass buf = qvariant_cast(spy.at(0).at(0));'は全く同じです。 – Atlante45
申し訳ありません。投稿されたフルコード。 – Mike
スタックトレースはどこですか? – MrEricSir