組込C言語でUnitTest 2
前回のつづきから
普段は、下記の本を参考にTDD(テスト駆動開発)を勉強しています。
「テスト駆動開発による組み込みプログラミング ―C言語とオブジェクト指向で学ぶアジャイルな設計」:Amazon CAPTCHA
まだ半分くらいしか読んでいません。(^_^*)
Facebook の組込みTDD勉強会にも参加させて頂いています。
ツールはOSSののCppUTestです。TDDをやる理由とやり方とソースが載っています。
勉強半ばで、なかなかOUTPUTは出来ない状況です。
googletestのセットアップ
Googletestのソースを取得します
GitHub - google/googletest: Google Test
MinGWをいれる
インストールは、まずは、WindowsにMinGW (またはCygwinでもいいですが) を入れました。 (インストール後、MinGWのbinフォルダと Msysのbinフォルダのpathが通っている事を確認しておく)
MinGWにMsysというコマンドライン実行ツールみたいのがついてるので、msysを起動してそこから googletestのソースをビルドしました。
googletestのビルド方法はこちらにありますが、
googletest/README.md at master · google/googletest · GitHub
googlemockを使うと思うので、こちらはスキップしてgooglemockのビルド方法を実施した方が良いと思います。
(ググった先で、2つを別々にビルドしてうまく動かなかった人がいたみたいなので)
GoogleMockのビルド(Googletestも同時ビルド)
googletest/README.md at master · google/googletest · GitHub
上記ページの真ん中くらいのコマンドを実行します。
C直下にソースを置きました。(フォルダ例)
/c/googletest/googletest /c/googletest/googlemock ・・・・
msysを起動して、googlemockのフォルダで実行
/c/googletest/googlemock $ autoreconf -fvi
これをやれ。と書いてあるので、
g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \ -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \ -pthread -c ${GTEST_DIR}/src/gtest-all.cc g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \ -isystem ${GMOCK_DIR}/include -I${GMOCK_DIR} \ -pthread -c ${GMOCK_DIR}/src/gmock-all.cc ar -rv libgmock.a gtest-all.o gmock-all.o
こんな感じに置き換えて順番に実施
g++ -isystem /c/googletest/googletest/include -I /c/googletest/googletest \ -pthread -c /c/googletest/googletest/src/gtest-all.cc ar -rv libgtest.a gtest-all.o g++ -isystem /c/googletest/googletest/include -I/c/googletest/googlemock \ -isystem /c/googletest/googlemock/include -I/c/googletest/googlemock \ -pthread -c /c/googletest/googletest/src/gtest-all.cc g++ -isystem /c/googletest/googletest/include -I /c/googletest/googletest \ -isystem /c/googletest/googlemock/include -I/c/googletest/googlemock \ -pthread -c /c/googletest/googlemock/src/gmock-all.cc ar -rv libgmock.a gtest-all.o gmock-all.o
最後のところ。オブジェクトファイルが出来た。
$ ar -rv libgmock.a gtest-all.o gmock-all.o a - gtest-all.o a - gmock-all.o
フォルダ内に、リンク用のオブジェクトファイル
- libgtest.a
- libgmock.a
ができてると思います。
実際のテストコードをビルドするコマンド
上記ページには、こうやってビルドして。と書いてありますが、
g++ -isystem ${GTEST_DIR}/include -isystem ${GMOCK_DIR}/include \ -pthread path/to/your_test.cc libgmock.a -o your_test
eclipseから実行したかったので、こちらのページを参考にして実施しました。
googletestのみの説明ですが、googlemockも同じ様に設定します。
(-pthread の指定がされていないかもしれないのが気になる)
GoogleTest Installation and Use in Eclipse/C++ Instructions
やっていることは、だいたいこんな感じ。
- MINGWをコンパイラに使う
- GCC C++ Compiler の Miscellaneous の、その他フラグに、 -std=gnu++11 を最後に追加。
- GCC C++ Compiler の Includes に、googleのソースのincludeフォルダを指定する
- MinGW C++ Linker の Libraries に、パスを指定(上記ビルドして作ったリンク用オブジェクトファイル)、名前を設定。(libと.aを除いた部分⇛gtest と gmock)
あとは、サンプルコードで試してみればテスト出来る環境になっている事が確認出来ます。
eclipseでやるときの注意
Windowsに別途入れたMinGWとeclipseのminGWとではバージョンが違うので、そのままだとうまくリンク出来ないので、 eclipseのmingwを使わない様にする必要があるかもしれません。
方法は、eclipseのCC C++ Compiler のビルドタブあたりに、パスを設定するとことがあるので、 eclipse/mingw32/binみたいなパスの登録を削除します。
はじめから、googletestのビルドをeclipseでビルドできれば、MINGW自体を入れる必要もないのですが・・・(出来るか不明)
つづきは、また今度