Char数组初始化在课堂上

时间:2015-02-23 15:16:57

标签: c++ arrays cppunit

我正在尝试对我正在构建的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}}等等。

我知道有一种简单,正确的方法可以做到这一点并考虑应用程序的实际功能,这部分应该是最简单的。

3 个答案:

答案 0 :(得分:1)

你几乎没有选择:

  1. 使用语法firstMessage{0x24,0x54,0x3b,0x72,0x8b,0x03,0x24,0x29,0x23,0x43,0x66,0x22,0x53,0x41,0x11,0x62,0x10}在构造函数MesssageParsingTest中初始化数组 在初始化列表中。
  2. 创建包含您的消息的静态const数组,并使用memcpy将其复制到成员变量,或者使用静态成员并删除firstMessage成员变量。
  3. 在类定义中的.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);
}