Я написал макет так:
#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));
}
Есть ли способ сделать это?
Я не смог выяснить из документации, можно ли и как это реализовать, и обнаружил, что операции с «указателями» сбивают с толку ... мои извинения