2016-12-21 3 views
2

Я начинаю использовать CppUTest для некоторых встроенных проектов C. Теперь я имею дело с издеваемыми вызовами в систему. После того, как научились передавать типы typicall C, в Ex:CppUtest: как вернуть пользовательскую структуру из mocked function

Пример, который работает должным образом:

Mock файл часть кода:

uint32_t LL_TIM_GetPrescaler(TIM_TypeDef * TIMx){  

    mock().actualCall("LL_TIM_GetPrescaler"); 
    return mock().unsignedIntReturnValue(); 
} 

Тестовый файл часть код, связанный с этим издевательством:

TEST (HAL_AS393,HAL_AS393x_Init_test) 
{ 
    ... 
    mock().expectOneCall("LL_TIM_GetPrescaler").andReturnValue(TEST_PRESCALER_VALUE); 
    //being TEST_PRESCALER_VALUE an int initialized variable before 
    ... 
} 

У меня нет проблем при понимании этого.

Но теперь я пытаюсь передать структуру из теста на макет вызова с нужным списком полей, которые я хочу, чтобы макет посылал функции вызова (тестового производственного кода). Случай проверяет функцию с помощью некоторых системных вызовов. И эта вещь, как:

Куска коды тестируемый:

//struct type definition 

typedef struct 
{ 
    bool_t     WAKE_FLAG; 
    bool_t     DATA_READ_FLAG; 
}HAL_AS393X_Status; 

//function under test 
RFIDDrvStatus RFID_DRV_GetStatus(void) 
{ 
    HAL_AS393X_Status HAL_Status; 
    ...  
    HAL_Status=HAL_AS393x_GetStatus(); 
    ... 
} 

Теперь идея - в тестовом файле, используя макет -:

TEST(RFID_Drv,RFID_DRV_GetStatus_test) 
{ 
    HAL_AS393X_Status FAKE_HAL_STATUS; 
    FAKE_HAL_STATUS.WAKE_FLAG=TRUE; 
    FAKE_HAL_STATUS.DATA_READ_FLAG=TRUE; 
    ... 
    mock().expectOneCall("HAL_AS393x_GetStatus").andReturnValue(FAKE_HAL_STATUS); 
    ... 
} 

Мой вопрос в том, как я могу построить mock.actualCall этого mock.expectOneCall ("HAL_AS393x_GetStatus") в ord er сказать, что он должен возвращать структуру определенного типа (HAL_AS393X_Status)? Я serching информацию для делать что-то вроде этого, если это возможно, или, если он существует:

mock().actualCall("HAL_AS393x_GetData"); 
return mock().XXXReturnValue();` 

Что издеваться синтаксис должен быть только на XXX месте?

+0

Просто уточнить: Ваш вопрос «как вернуть обычай структура в издеваемую функцию? " Если да, пожалуйста, отредактируйте заголовок, это не ясно. В названии говорится, что вы хотите передать аргумент макету, тело говорит, что вы хотите вернуть пользовательский тип из макета. Это хороший вопрос, это будет потрясающе, если вы можете сделать это немного яснее. –

+0

Думаю, что да. Я построил структуру, поля которой заполняются значениями (на стороне тестирования), а затем мне нужно сказать, что макет вызова вернет структуру с этими значениями. Идея, которую я имею, или то, что я хотел бы найти, - это если есть какой-то способ сделать то же самое, что я поставил выше, в пример, в первую очередь, но нарисуйте structs вместо integer, char или bool, type и т. Д. –

+0

Ok тогда. Попробуйте мой ответ, дайте мне знать результаты. –

ответ

1

Используйте CppUMock returnPointerValueOrDefault, отбрасывайте и разыщите его перед возвратом.

Ваше издевались Тело функции может выглядеть так:

static HAL_AS393X_Status default; 
mock().actualCall("HAL_AS393x_GetData"); 
return *(HAL_AS393X_Status *)mock().returnPointerValueOrDefault(&default);` 

А в тесте вы ожидаете, что макет так:

TEST(RFID_Drv,RFID_DRV_GetStatus_test) 
{ 
    HAL_AS393X_Status FAKE_HAL_STATUS; 
    FAKE_HAL_STATUS.WAKE_FLAG=TRUE; 
    FAKE_HAL_STATUS.DATA_READ_FLAG=TRUE; 
    ... 
    mock().expectOneCall("HAL_AS393x_GetStatus").andReturnValue(&FAKE_HAL_STATUS); 
    ... 
} 
+0

Спасибо Фелипе Л. Я попробую это. Как только я смогу поделиться своими результатами. –

Смежные вопросы