我正在尝试对我正在构建的C ++应用程序进行单元测试,并且在类中使用时初始化数组时遇到问题。我已经尝试了很多加载这些信息的不同方法,唯一有效的方法是低效/不适合。
这是我拥有的十六进制数组(随机化部分)
0x24,0x54,0x3b,0x72,0x8b,0x03,0x24,0x29,0x23,0x43,0x66,0x22,0x53,0x41,0x11,0x62,0x10
我的单元测试的头文件:
class MessageParsingTest : public CPPUNIT_NS::TestFixture {
CPPUNIT_TEST_SUITE(MessageParsingTest);
CPPUNIT_TEST(testIdentifyFirstMessageType);
CPPUNIT_TEST_SUITE_END();
public:
MessageParsingTest();
virtual ~MessageParsingTest();
void setUp();
void tearDown();
private:
void testIdentifyFirstMessageType();
void testIdentifySecondMessageType();
// data members for the hex array
unsigned char firstMessage[1500];
};
然后在我的测试用例setUp函数中;
void MessageParsingTest::setUp() {
firstMessage = {0x24,0x54,0x3b,0x72,0x8b,0x03,0x24,0x29,0x23,0x43,0x66,0x22,0x53,0x41,0x11,0x62,0x10};
}
这是我最近的失败尝试,它说它在编译期间无效,正如我所料,但此时我正在尝试任何事情。
我也尝试过(所有在setUp函数中)
firstMessage << "\0x24\0x54\0x3b\0x72\0x8b\0x03\0x24\0x29\0x23\0x43\0x66\0x22\0x53\0x41\0x11\0x62\0x10";
firstMessage[1500] = "\0x24\0x54\0x3b\0x72\0x8b\0x03\0x24\0x29\0x23\0x43\0x66\0x22\0x53\0x41\0x11\0x62\0x10";
以及其他一些疯狂的方法,有谁知道加载这些数据的正确方法?我到目前为止工作的唯一方法是没有数据成员声明,直接定义它并在一行中初始化(但后来我无法在测试用例中访问)或像{{{{{{{{{ 1}}等等。
我知道有一种简单,正确的方法可以做到这一点并考虑应用程序的实际功能,这部分应该是最简单的。
答案 0 :(得分:1)
你几乎没有选择:
firstMessage{0x24,0x54,0x3b,0x72,0x8b,0x03,0x24,0x29,0x23,0x43,0x66,0x22,0x53,0x41,0x11,0x62,0x10}
在构造函数MesssageParsingTest中初始化数组
在初始化列表中。在类定义中的.h中声明const静态成员:
static const unsigned char kFirstMessage[];
并在.ccp中定义+初始化
const unsigned char MessageParsingTest::kFirstMessage[] = "\0x24\0x54\0x3b\0x72\0x8b\0x03\0x24\0x29\0x23\0x43\0x66\0x22\0x53\0x41\0x11\0x62\0x10";
如果你不打算稍后修改这个数组,我更喜欢静态const成员,因为它使意图更清晰。
答案 1 :(得分:1)
这是一种方法。
void MessageParsingTest::setUp()
{
unsigned char x[] = {0x24,0x54,0x3b,0x72,0x8b,0x03,0x24,0x29,0x23,0x43,0x66,0x22,0x53,0x41,0x11,0x62,0x10};
::memcpy(firstMessage, x, sizeof(x));
}
如果您使用的是C ++ 11,还可以将类成员初始化列表中的firstMessage初始化为
MessageParsingTest::MessageParsingTest() :
firstMessage{0x24,0x54,0x3b,0x72,0x8b,0x03,0x24,0x29,0x23,0x43,0x66,0x22,0x53,0x41,0x11,0x62,0x10},
...
答案 2 :(得分:0)
您可以使用临时缓冲区,然后将其复制到您的成员中:
void MessageParsingTest::setUp() {
unsigned char tmp[1500] = {0x24,0x54,0x3b,0x72,0x8b,0x03,0x24,0x29,0x23,0x43,0x66,0x22,0x53,0x41,0x11,0x62,0x10};
memcpy(firstMessage, tmp, 1500);
}