CppuTest: тестирование содержимого массива (C-Code) - PullRequest
0 голосов
/ 23 мая 2019

Я написал макет так:

#include "CppUTestExt/MockSupport_c.h"


uin32_t mwWriteParameters(uint32_t *parameter,
                                         uint8_t nPar,
                                         void *DataBuffer,
                                         uint32_t DataBufferSize)
{
#ifdef DDEBUG
    printf("mwWriteParameters!\n");
#endif

    mock_c()->actualCall("mwWriteParameters")->
                        withConstPointerParameters("parameter", (void*) parameter)->
                        withUnsignedIntParameters("nPar", nPar)->
                        withConstPointerParameters("DataBuffer", (void*) DataBuffer)->
                        withOutputParameter("DataBuffer", (void*) DataBuffer)->
                        withUnsignedIntParameters("DataBufferSize", DataBufferSize);
    for (int i=0; i<nPar; i++){
        printf("%d: 0x%08x\n", i, *(uint32*)parameter);
    }
    printf("%d: ", DataBufferSize);
    for (int i=0; i<DataBufferSize; i++){
        printf(" 0x%02x", ((sint8_t*)DataBuffer)[i]);
    }
    printf("\n");

    return mock_c()->returnUnsignedIntValueOrDefault(ERR_OK);
}

Приведенный выше код включает распечатки, которые показывают мне, что значение, переданное моей тестируемой функцией, является правильным. Это вывод:

0: 0x03000a02
2: 0x04 0x34

Я так и не понял, как настроить тест, чтобы проверялись не указатели, а их «содержимое».

Я пробовал следующий тест, который, конечно, не работает:

TEST(execFileTransferRequest, Start_EItoRIC)
{
    sint8_t Buffer[1000];
    uint32_t Size=sizeof(Buffer);
    uint8_t valueException[sizeof(uint16_t)] = { 0xff, 0xff };
    uint32_t parameter[] = { 0x03000A02 };
    uint16_t exceptionID;

    mock_c()->expectOneCall("mwWriteParameters")->
                    withConstPointerParameters("parameter", parameter)->
                    withUnsignedIntParameters("nPar", sizeof(parameter)/sizeof(uint32_t))->
                    withOutputParameterReturning("DataBuffer", (void*)valueException, sizeof(valueException))->
                    withUnsignedIntParameters("DataBufferSize", sizeof(valueException))->
                    andReturnUnsignedIntValue(ERR_OK);


    CHECK_EQUAL( ERR_OPERATION_FAILED, funcUnderTest(Buffer, &Size, Size ));


    mock_c()->checkExpectations();
}

А 'funcUnderTest' вот так (сильно укорочено):

void funcUnderTest(sint8_t *buf, uint16_t *s, uint32_t size)
{
    uint32_t parameter[] = { 0x03000A02 };
    sint8_t DataBuffer[] = {  0x04, 0x34 };

    mwWriteParameters(parameter, 1, DataBuffer, sizeof(DataBuffer));
}

Есть ли способ сделать это? Я не смог выяснить из документации, можно ли и как это реализовать, и обнаружил, что операции с «указателями» сбивают с толку ... мои извинения

...