以前このブログで紹介したCppUTestについては、他のC++向けテスティングフレームワークと比較してターゲット上でも実行しやすいというメリットを持っています。このメリットは組み込み開発でTDDを進める上で大きな助けとなります。
とりあえず今回はひと手間必要なHEWでのビルド方法をまとめます。
Static Libraryのビルド
- 「Library」プロジェクトでプロジェクト新規作成
- プロジェクトフォルダに以下のフォルダを移動
- ダウンロード&解凍したCppUTestフォルダのうちの「src」フォルダ
- 同フォルダのうちの「include」フォルダ
- プロジェクトに以下のファイルを追加
- 移動フォルダでの「src/CppUTest」にあるファイルすべて
- 同フォルダでの「src/Platforms/GccNoStdC」にあるファイル
- 同フォルダでの「include/CppUTest」にあるファイルすべて
- 同フォルダでの「include/Platforms/Gcc」にあるファイル
- ビルドメニューの「**** engine Standard Toolchain」項目にて、以下を追加
- インクルードファイルディレクトリに以下を追加
- ベースパス:「Project directory」
- サブディレクトリ:「include」
- マクロ定義でのマクロに「CPPUTEST_STD_CPP_LIB_DISABLED」を追加
- インクルードファイルディレクトリに以下を追加
- プロジェクトをビルド。「プロジェクト名.lib」が生成される。
ターゲットプロジェクトの作成
- ターゲット用プロジェクトファイル新規作成
- プロジェクトフォルダに以下のフォルダを移動
- ダウンロード&解凍したCppUTestフォルダのうちの「include」フォルダ
- 先ほど生成した「プロジェクト名.lib」
- プロジェクトに以下のファイルを追加
- 同フォルダでの「include/CppUTest」にあるファイルすべて
- 同フォルダでの「include/Platforms/Gcc」にあるファイル
- ビルドメニューの「**** engine Standard Toolchain」項目にて、以下を追加
- インクルードファイルディレクトリに以下を追加
- ベースパス:「Project directory」
- サブディレクトリ:「include」
- マクロ定義でのマクロに「CPPUTEST_STD_CPP_LIB_DISABLED」を追加
- ライブラリファイルに格納した「プロジェクト名.lib」をパス含め追加
- インクルードファイルディレクトリに以下を追加
- プロジェクトをビルド。ターゲット上でユニットテストを実行するバイナリが生成される。
なおmain関数は例えば以下のように記述。
#include <CppUTest/CommandLineTestRunner.h> //#include "typedefine.h" #ifdef __cplusplus //#include <ios> // Remove the comment when you use ios //_SINT ios_base::Init::init_cnt; // Remove the comment when you use ios #endif void main(void); #ifdef __cplusplus extern "C" { void abort(void); } #endif void main(void) { const char *argv[] = { "" }; CommandLineTestRunner::RunAllTests(0, argv); } #ifdef __cplusplus void abort(void) { } #endif