1
我想用QtTest設置一些單元測試,我想用QFETCH。用Q_DECLARE_METATYPE聲明無符號字符[]
我測試下面的函數:
static std::vector<bool> FrameHandler::getBitsFromFrame(unsigned char* data, unsigned char length);
它只是簡單地將一陣列炭的成比特向量。
所以,我建立了我的測試類是這樣的:
#include <QtTest/QtTest>
#include <vector>
#include "FrameHandler.h"
class BusTester : public QObject {
Q_OBJECT
private slots:
void bytesToVector_data() {
QTest::addColumn<unsigned char[]>("Tested");
QTest::addColumn<unsigned char>("Length");
QTest::addColumn< std::vector<bool> >("Reference");
// Test for one byte
std::vector<bool> oneByte(8, false);
oneByte[0] = true;
oneByte[1] = true;
oneByte[3] = true;
oneByte[4] = true;
unsigned char oneByteInput[1]{
0b11011000
};
QTest::newRow("One byte") << oneByteInput << 1 << oneByte;
}
void bytesToVector() {
QFETCH(unsigned char[], tested);
QFETCH(unsigned char, length);
QFETCH(std::vector<bool>, reference);
QCOMPARE(FrameHandler::getBitsFromFrame(tested, length), reference);
}
};
QTEST_MAIN(BusTester)
#include "bustester.moc"
當我這樣做時,編譯器說:
expected unqualified-id before ‘[’ token
QFETCH(unsigned char[], tested);
而且也:
On line `QTest::addColumn<unsigned char[]>("Tested");`, Type is not registered, please use the Q_DECLARE_METATYPE macro to make it known to Qt's meta-object system
我想這兩個錯誤是有聯繫的,所以我在類聲明前加了Q_DECLARE_METATYPE(unsigned char[]);
,但是我得到這個:
在
qmetatype.h
,前 '*' 標記(線1695)
是否有可能宣佈unsigned char[]
Qt的QMetaType系統預計 '>'? 謝謝
或者只是使用一個'無符號字符*' – dtech
是。但在這種情況下,您必須保持某個尖頂對象以避免訪問衝突。這個測試數據,所以它可以靜態常量來實現。 – arturx64
據推測,OP知道他在做什麼,現在要避免出界限。 – dtech