3

いくつかの C 組み込みプロジェクトで CppUTest を使い始めています。今、私はシステムへの模擬呼び出しを扱っています。Cの典型的な型を渡す方法を学んだ後、例:

正しく動作する例:

コードのモック ファイル部分:

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.expectOneCall("HAL_AS393x_GetStatus") の mock.actualCall を構築して、定義された型の構造体 (HAL_AS393X_Status) を返さなければならないと言うにはどうすればよいですか? 可能であれば、または存在する場合は、次のようなことを行うための情報を探しています。

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

XXX の場所だけに必要なモック構文は何ですか?

4

1 に答える 1

2

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);
    ...
}
于 2016-12-21T12:51:38.070 に答える