Fight the Future

Java言語とJVM、そしてJavaエコシステム全般にまつわること

OpenJDKのgtestを実行する

openjdk.java.net

OpenJDKにはjtregのテストとgtest(GoogleTest)のテストがあるのですが、gtestの方です。ドキュメントにあるmake test-only TEST=の形式ですぐに動かせなかったので、同僚に教えてもらった他の実行方法をメモとして残します。

セットアップ

GoogleTestをダウンロードします。バージョンはOpenJDKのドキュメントにあるものを使いましょう。 この記事を書いている時点では1.8.1でした。GitHubからクローンでもソースのダウンロードでもよいです。

OpenJDKのディレクトリでconfigureします。

$ bash configure --with-gtest=[googletestのディレクトリ] --enable-debug --with-native-debug-symbols=internal

[googletestのディレクトリ]とは、ダウンロードして展開したトップディレクトリで大丈夫です。トップディレクトリの中にgoogletestgooglemockディレクトリが含まれている構成です。

make imagesします。

gtestの実行

今回の方法はgtestLauncherで実行するものです。buildディレクトリ以下にあります。-jdkオプションで使用するJDKを指定します。

$ ./build/linux-x86_64-server-fastdebug/hotspot/variant-server/libjvm/gtest/gtestLauncher -jdk:./build/linux-x86_64-server-fastdebug/jdk --gtest_filter=LogConfigurationTest.parse_empty_command_line_arguments_vm
Note: Google Test filter = LogConfigurationTest.parse_empty_command_line_arguments_vm
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from LogConfigurationTest
[ RUN      ] LogConfigurationTest.parse_empty_command_line_arguments_vm
[       OK ] LogConfigurationTest.parse_empty_command_line_arguments_vm (0 ms)
[----------] 1 test from LogConfigurationTest (311 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test case ran. (311 ms total)
[  PASSED  ] 1 test.

gtest_filterで実行するテストをフィルタリングします。ワイルドカードも使えます。ただ、gtestの実行はかなり高速なので、細かくフィルタリングする必要はないかもしれません。--gtest_list_testsを実行すると、テストの一覧が見れます。