今回は、GoogleTestを実機上で動かしてみようっていう試み。
(すっごい申し訳ないですが、記憶で書きました・・・ この手順やコマンドで、ほんとに動くか試しますが
手順的にはあってるはずなので・・・ 勘弁してください・・・)
なんでそんなことするかって、自分の環境で動くのに、実機にもってたら
実機に持っていったら動かないとか、良くある話ですよね。
それなら、テストが実機上で動けばいいんです。
GoogleTestは、configureを使うことが出来るので、クロスコンパイル設定をして
Makefileを作ってみます。
ダウンロードと展開
持ってくる場所は、この辺から(今回は1.5.0のtar.gzを使います)
んで、展開します。
tar zxvf gtest-1.5.0.tar.gz
とか、そんな感じ
ちなみに、クロスコンパイルすると自動でsharedライブラリはnoになるようです。
実際、テストのライブラリをramdiskに含むと、releaseの環境の場合に、リリースに不必要な
テスト要ライブラリをramdiskから外す手間や、そもそも、テスト環境とリリース環境ののramdiskに
差異が生まれてしまい、テスト自体が無意味になります。
sharedライブラリつくって、起動前にLD_LIBRARYを指定するのもアリだと思いますが
今回は、staticライブラリで動かします。
(どうしてもsharedを使う場合は、--enable-shared=yes を指定すれば出来ると思います(未検証)
今回は、staticリンクで、動かす感じになります。
configure
configure でmakeを作ります。
./configure --prefix=<ライブラリのインストール先> --host=<CPU名>-<実機のOS> CC=<コンパイラ> CXX=<コンパイラ>
です。
prefixについては、別にどこでもいいんですが、そのまま入れると、コンパイルする側の環境を書き換えるので
自分のところで動かなくなる危険があると思われます。
hostの指定は、powerpc(ppcでもOK) とか x86_64 とか。 「-」でつないで、linux って感じです。
CC と CXX は、実際に仕様するクロスコンパイラを指定してください。
make とか インストール
configureが成功したら
make all install
prefixで指定した先の書き込みアクセスに、root権限が必要なら
make all
sudo make install
です。
実際に動かして動作を確認してみる
ライブラリが出来上がったら、実際に動作を確認してみます。
まずはソースコードを作ります。
// ExcecuteTest.cpp
#include<gtest/gtest.h>
class ExecuteTest : public testing::Test {}
TEST_F( ExecuteTest, success )
{
EXPECT_EQ( 1, 2 );
}
今度は、これをコンパイルとリンク
<クロスコンパイラ g++> ExcecuteTest.cpp -I"<prefixで指定したパス/include>" -L"<prefixで指定したパス/lib>" -lpthread -lgtest -lgtest_main -o ExcecuteTest.bin
と、こんな感じ。
出来上がった ExecuteTest.bin を、実機環境に持っていって、動作させて REDを確認
8行目の「EXPECT_EQ( 1, 2 );」を 1, 1 に直して、実行ファイルを作り直して、Greenを確認
問題点と課題
- 実行結果とか、実行時の情報の取得が難しい
- CIとの連動(FTPで実現可能?)
- sharedライブラリで動作させるため、実行ファイルの肥大化
なんて課題があります。いくつか案はあるものの、まだ未実験です・・・
ちなみに、GoogleMockも同様の手順で動かすことが出来ますので必要な方は
読み替えて試してみてください。
0 件のコメント:
コメントを投稿