ACベースのmcuプロジェクトに使用できる単体テストフレームワークは何ですか?


15

私は、mcuプロジェクトで単体テストを使用する方法と、それを簡素化するために使用できるフレームワークについて考えています。

今日、私はLinux PCのOpenOCD-jtagでstm32を使用しています。これはすべて、古典的なMakefileから制御され、gccとクロスコンパイルされています。

自分で何かを作成することもできますが、使用できるフレームワークがある場合はそれがいいでしょう。(フレームワークがJenkins / Hudsonが読み取れる形式で結果を出力できる場合、これはボーナスです)。

stm32で単体テストフレームワークを使用する方法はありますか?


3
完全な答えを書く時間はありませんが、これらの論文ブログシリーズで見られる多くのツールやテクニックを使用しました。一言で言えば:CMock!
ケビンフェルメール

回答:


4

CppUTestとJames Grenningの優れたhttp://pragprog.com/book/jgade/test-driven-development-for-embedded-cをご覧ください。

CppUTestはCとC ++をサポートしており、Makefileテンプレートの素晴らしいセットを持っているので、すぐに始められました。


ePubバージョンを購入しました。良いかどうか見てみましょう:)
ヨハン

この本は良いのですが、私はその結束(その本の他のフレームワーク)が私のニーズをより良く満たすと思います。
ヨハン

本が正しい方向に私を押したので受け入れられました。
ヨハン

5

あなたの状況で使用する最適な単体テストフレームワークを決定する変数はたくさんあります。選択に影響する可能性のあるアイテムは次のとおりです。

  • ターゲット言語。
  • 利用可能なライブラリのサポート。たとえば、libcまたはそのカットダウンバージョン。
  • ターゲットのオペレーティングシステム。例:なし、FreeRTOS、カスタム。

ほとんどのxUnitタイプのフレームワークは、有用な基本レベルの機能を提供します。私は過去にCunitを使用してある程度の成功を収めています。(Ubuntu / Debianのlibcunit1-devパッケージ)。ほとんどのフレームワークではlibcを使用可能にする必要があり、一部のフレームワークでは追加のOSサポートが必要になります。

わずか3行の長さの別の代替はMinunitです。

マイクロコントローラーをターゲットとして使用した単体テストは、テストのダウンロード、実行、および結果の取得に適した環境を提示できるようにする必要があるため、非常に面倒であることがわかりました。これを可能にするプラットフォームを適切に配置することは、大きなタスクです。

私が取ったもう1つのアプローチは、ホストでユニットテストを行い、ドライバーとアプリケーションコードの間に抽象化レイヤーを実装することです。ターゲットにgccを使用しているため、コードもホストでコンパイルする必要があります。

通常、コンパイルホストでのテストは、ホストOSとそのすべてのツールを完全にサポートしているため、非常に簡単です。たとえば、ホストでテストする場合、ターゲット上で実行される実際のドライバーと同じインターフェイスを備えたモックバージョンのワイヤレスドライバーがあります。ホストバージョンはUDPパケットを使用してワイヤレスパケット転送をシミュレートします。モックドライバーはパケットをドロップする機能をサポートしているため、プロトコルをテストできます。

私が取り組んでいた製品では、スレッドOSが使用されていたため、ホストOSでテストするための抽象化レイヤーは代わりにpthreadを使用していました。

完全ではありませんが、テストを作成して実行するのが簡単であればあるほど、より多くのテストケースを実装する可能性が高くなります。コードを異なるプラットフォームで実行することのもう1つの利点は、コードが移植可能であることをテストすることです。ターゲットとホストのアーキテクチャが異なる場合、エンディアンの間違いをすばやく見つけることができます。

私は少し話題から外れましたが、これらのアイデアがテストフレームワークとテスト方法の選択に役立つかもしれないと感じています。


ターゲットでコードを取得する方法を解決しました。スクリプトモードでgdbを使用して、test_okやtest_fail(fun-tech.se/stm32/TestSuite/index.php)などのさまざまなブレークポイントで停止できます。だから私は中途半端です。これは、異なる「テスト」をどのように構築するかという問題です。今日の私の考えは少し柔軟性に欠けているため、何らかのフレームワークを探し始めました。
ヨハン

1

embUnit http://embunit.sourceforge.net/embunit/index.htmlをご覧ください。これは、フットプリントの小さい組み込みCユニットテストフレームワークです。

いくつかの組み込みマイクロコントローラプロジェクトで使用できました。デスクトップユニットテストフレームワークで得られるオプションや機能を期待しないでください。しかし、それは間違いなく十分に強力です。

アサーションの多くが定義されているので、minUnitのようにカスタムアサーションを書く時間を無駄にする必要はありません。


1

少し前に、トピックに関する徹底的なチュートリアルを書きました。Ceelingを使用した(組み込み)Cアプリケーションの単体テスト。私はこれらの手法を多くのプロジェクトで使用していますが、これまでのところ非常に満足しています。


2
これはリンクのみの回答であり、URLが変更されたりリンクがダウンしたりすると、価値がなくなります。回答の関連情報を説明してから、参照としてリンクを追加できます。
パイプ

2
@pipeはい、ただし質問(本質的に製品の推奨事項)はこのような回答を求めています。
ドミトリーグリゴリエフ


-1

リントを試してみてください。しかし、単体テストやコード分析には向いていません。


2
静的コード分析はコードの実行とテストに役立ちません。そのため、リントはあまり役に立ちません。
ヨハン

1
単体テストのコンテキストではおそらく役に立たないかもしれませんが、誰もが何らかの静的分析ツールを使用する必要があります。
ティム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.