普段、業務ではRenesasのRL78やRX、ARMのCoretexM0〜CoretexM3辺りを触ることが多いんですが、このあたりのハードウェアに近いレイヤーの開発はテストの自動化の浸透が遅れている領域の一つかと思っています。(自分の周りだけかもしれませんが・・。) Renesas製のマイコンとなるとホストもwindowsになる場合が多く、それがテスト自動化の導入のしきいを上げる要因のひとつになっているのでは?と考えています。
今回はwindows上でCygwin/Eclipse/googleTestを使用し、テストを行えるところまでのメモを記載します。 基本的には以下の書籍を参考にしていますが、書籍ではVirtualBox+Ubuntu上に環境を構築しています。 諸事情によりVirtualBox+Ubuntuが使用できない方の参考になればと思います。
参考書籍
モダンC言語プログラミング 統合開発環境、デザインパターン、エクストリーム・プログラミング、テスト駆動開発、リファクタリング、継続的インテグレーションの活用 (アスキー書籍)
- 作者: 花井志生
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/01/23
- メディア: Kindle版
- この商品を含むブログ (3件) を見る
タイトルにはありませんが”組み込み向け”を意識した内容になっています。(・・と思っています。)
Cygwinのインストール
setupのダウンロード http://cygwin.com/install.htmlよりsetup.exeをダウンロードする
setup.exeの実行 Root Directoryを聞かれますが、自分は
C:\Windows\cygwin
としました (なぜかC直下だとGCCのインストールでエラーとなったため)- パッケージの選択
「Deval」を必ず「install」にする
- PATHを通す
PATHに
C:\Windows\cygwin
を追加する - gccの確認
アクセスが拒否されました >gcc -4 アクセスが拒否されました
上記のように「アクセスが拒否されました」となる場合、Cygwin\binのgcc.exe,g++.exeをリネームし、gcc-3(-4).exe、g++-3(-4).exeをgcc.exe,g++.exeにリネームする
その後、gcc,g++でno input files
となればOK
gcc: no input files >g++ g++: no input files
- エラー対策
*** multiple target patterns. Stop.
というエラーが発生する場合、Cygwin/binのmake.exeを以下のものに差し替える http://www.cmake.org/files/cygwin/make.exe
以上でCygwinのインストールは完了
Eclipseのインストール
- Eclipseのダウンロード
Pleadesのプロジェクトページダウンロードする
環境に合わせC/C++と書いてある列のものを選択すること
- Eclipseのインストール ダウンロード後、任意のディレクトリに解凍する eclipse.exeを実行するとeclipseが立ち上がる
以上でEclipseのインストールは完了
ここからは「モダンC言語プログラミング」p147~とほぼ同じ内容となります 詳細はそちらを参照願います
Google Testのインストール
Google Testのインストール http://code.google.com/p/googletest/downloads/listからダウンロードする ダウンロード後任意の場所に展開する
ライブラリの作成
>cd gtest-1.7.0 >g++ -I.include -I. -c ./src/gtest-all.cc >ar -rv libgtest.a gtest-all.o
これでlibgtest.aというライブラリファイルが生成されます g++のバージョンが変更になったら再度ライブラリを生成してください (ライブラリを再生成し忘れ原因不明のエラーで半日つぶしました)
Eclipseの設定
- プロジェクトの作成
[ファイル] - [新規] - [C++プロジェクト]を選ぶ
[ツールチェーン]では[Cygwin GCC]を選択する
- GoogleTestの設定
プロジェクトのプロパティ―から[C/C++一般] - [パスおよびシンボル]を選ぶ
[インクルード]タブを選択し、[追加] - [ファイルシステム]から(gtest-1.7.0/include)を選択 [ライブラリー・パス]タブを選択し、[追加] - [ファイルシステム]から(gtest-1.7.0)を選択 [ライブラリー]タブを選択し[追加]を押して、ファイル名に「gtest」を追加して[OK]、もう一度[追加]を押して、ファイル名に「pthread」を追加して[OK]
テストの実行
- 以下のファイルをプロジェクトに追加 add.cがテスト対象、add_test.ccがテストコードです
・add_test.cc
#include "gtest/gtest.h" #include "add.h" int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } TEST(AddTest, onePlusTwoGivesThree) { EXPECT_EQ(3, add(1, 2)); }
・add.c
#include "add.h" int add(int i1, int i2) { return i1 + i2; }
・add.h
#ifndef ADD_H_ #define ADD_H_ #ifdef __cplusplus extern "C" { #endif int add(int i1, int i2); #ifdef __cplusplus } #endif #endif /* ADD_H_ */
- ビルド・実行 ビルドに成功するとadd.exeが生成される add.exeを実行することでテストが開始される
テスト結果
たとえばadd_test.ccを以下のようにすると
#include "gtest/gtest.h" #include "add.h" int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); } TEST(AddTest, onePlusTwoGivesThree) { EXPECT_EQ(2, add(1, 2)); }
失敗する
おまけ
「Grep Console」をeclipseの追加すると特定の文字を含むメッセージに色を付けることができる この機能を使うと[OK]、[PASSED]の時は緑色、[NG]、[FAILED]の時は赤色を表示するなどのカスタマイズが可能となる 些細なことかもしれませんが、個人的には結構重要かと思います オールグリーンのときは気持ちよくモチベーションあがりますからね