GoogleTestをやろうとして、意外とハマったのでメモ。
ハマった原因
- google mockがない時代?のドキュメントが多く、ディレクトリ構成が微妙に今と違うドキュメントが多い。
- 環境変数名で悩む(定番がどれかわからず。。。) =>これは結局わからず。
事前準備
gitとcmakeは別途インストールなど、準備してください。
ビルド
$ git clone https://github.com/google/googletest.git
$ cd googletest
$ mkdir build
$ cd build
$ cmake ..
$ make
ビルド結果確認
できあがったライブラリはどこでしょう。。。
$ find ./ -name "*.a"
googlemock/gtest/libgtest.a
googlemock/gtest/libgtest_main.a
googlemock/libgmock.a
googlemock/libgmock_main.a
ありました。
gtest.hも探しておきます。
$ cd ..
$ find ./ -name "gtest.h"
.//googletest/include/gtest/gtest.h
.//googletest/include/gtest/internal/custom/gtest.h
今後使うのは、googletest/includeの方のinclude directoryです。
ここで環境変数設定しておく
export GTEST_ROOT=".gitのあるディレクトリ"
export GTEST_INCLUDEDIR=$GTESTROOT/googletest/include
export GMOCK_INCLUDEDIR=$GTESTROOT/googlemock/include
export GMOCK_LIBDIR=$GTESTROOT/build/googlemock
export GTEST_LIBDIR=$GTESTROOT/build/googlemock/gtest
適宜、.bashrcなどに書いておく。
環境変数のチェック
環境変数の設定間違えるとハマるのでチェック
$ ls $GMOCK_INCLUDEDIR
gmock
$ ls $GTEST_INCLUDEDIR
gtest
$ ls $GMOCK_LIBDIR
CMakeFiles cmake_install.cmake libgmock_main.a
CTestTestfile.cmake gtest
Makefile libgmock.a
$ ls $GTEST_LIBDIR
CMakeFiles Makefile libgtest.a
CTestTestfile.cmake cmake_install.cmake libgtest_main.a
テストしてみる
main()をlibgtest_main.aに任せる場合
test1.cpp
#include "gtest/gtest.h"
TEST(Test1, test11)
{
ASSERT_EQ(1, 1);
}
$ g++ test1.cpp -I$GTEST_INCLUDEDIR -L$GTEST_LIBDIR -lgtest -lgtest_main
$ ./a.out
Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from Test1
[ RUN ] Test1.test11
[ OK ] Test1.test11 (0 ms)
[----------] 1 test from Test1 (0 ms total)
[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (0 ms total)
[ PASSED ] 1 test.
main()を自分で書く場合
test2.cpp
#include "gtest/gtest.h"
TEST(Test1, test11)
{
ASSERT_EQ(1, 1);
}
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
$ g++ test2.cpp -I$GTEST_INCLUDEDIR -L$GTEST_LIBDIR -lgtest