web-dev-qa-db-ja.com

組み込みテスト駆動開発でHALを抽象化する方法は?

最近、テスト駆動開発のトピックを読んでいて、必要なセンサードライバーを試してみることにしました。センサーはSPIインターフェイスを使用しており、プロジェクト生成のためにCubeMXの助けを借りてこのドライバーをSTM32F415プロセッサーに実装します。プロジェクトを生成した後、HALにアクセスできますSPI関数このような:

HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)

'sensor_hall.h'というヘッダーファイルを作成し、これにSPI関数宣言を入れてから、CMockを使用してこのヘッダーのモックを生成します。

私の質問は、これは有効なアプローチですか?これにさらに抽象化を導入する必要がありますか?そして、最初の引数、モックするときのSPI structへのポインタ)をどのように扱うか?

2
hbrezak

あなたの本能は正しく、あなたは有効なアプローチを提案しています。ここでミックスに抽象化を追加する必要はありません。

Spi構造体(へのポインター)を取得するHAL_SPI_ *関数もあると想定すると、モックに役立つメンバーを含む、spi構造体のモック固有バージョンを使用できます。

Spi構造体をクライアントコード(センサードライバー)で直接宣言する必要がある場合は、一貫して同じポインターが渡されることをモックで確認します。