我開始對C嵌入式項目使用CppUTest。現在我正在處理系統的模擬呼叫。學會了之後如何通過Ç。典型類型中,例如:CppUtest:如何從模擬函數返回一個自定義結構
實例可以正常工作:代碼
模擬文件部分:
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);
...
}
我的問題是,如何在ord中構建mock.expectOneCall(「HAL_AS393x_GetStatus」)的mock.actualCall呃說它必須返回一個定義的類型結構(HAL_AS393X_Status)? 我serching對於如果可能的話,或者如果它存在,做這樣的信息:
mock().actualCall("HAL_AS393x_GetData");
return mock().XXXReturnValue();`
什麼模擬語法必須是在剛上XXX的地方嗎?
只是爲了澄清:是你的問題「怎麼回事定製模擬函數中的結構?「如果是,請編輯標題,但不清楚。標題說你想傳遞一個參數給模擬,身體說你想從模擬中返回自定義類型。這是一個很好的問題,如果你能更清楚一點,那將是非常棒的。 –
我這麼認爲。我已經構建了一個結構體,其中填充了值(在測試方面),然後我需要說模擬調用將返回具有這些值的結構體。我想要的想法或者我想找到的東西是,如果有什麼辦法可以做到上面我做的,首先,例如,鍵入結構,而不是整數,char或bool,類型等。 –
好的然後。試試我的答案,讓我知道結果。 –