はじめに
Google Testは、Googleがオープンソースで公開しているC++のテストフレームワークです。
本稿では、Google Testを使ってC++のコードをテストするごく小さなプロジェクトの構成例を紹介します。
主に、これからGoogle Testによるテストを導入しようとしている人にとって、参考になればと思います。
筆者が作業した環境の情報は以下の通りです。
- Mac OS X El Captain
- CMake v3.8.2
- Google Test v1.8.0
Mac環境ではありますが、 CMake を使っているので、大抵の環境で通用するやり方だと思います。
CMake自体は、公式サイトのバイナリや、Macであれば Homebrew によってインストールできます。
NOTE:
- Google Test v1.8でディレクトリ構成が変わっているため、以降の記述について、v1.7以前を使う場合は変更が必要な部分があります。
プロジェクト構成例
ミニマムなソースツリーの構成を示します:
myapp/
├── MyApp.cpp
├── MyApp.hpp
└── test/
├── CMakeLists.txt
├── MyAppTest.cpp
└── lib/
└── googletest # git submodule
Google TestはGit submoduleとして追加します。
そのコマンド例は、以下のようになります:
# shell
mkdir -p test/lib
git submodule add https://github.com/google/googletest.git test/lib/googletest
pushd test/lib/googletest
git checkout release-1.8.0
popd
git add test/lib/googletest
git commit -m "Add submodule googletest for testing"
サンプルコード
上のソースツリーを前提に、かんたんなソースコードとテストコードのサンプルを示します。
MyApp.cpp
には、テスト用に適当なメソッドを定義します。
class MyApp
{
public:
static int multiply(int i, int j);
};
#include "MyApp.hpp"
int MyApp::multiply(int i, int j)
{
return i * j;
}
test/MyAppTest.cpp
に、Google Testを使ったテストコードを記述します。
#include "../MyApp.hpp"
#include "gtest/gtest.h"
TEST(multiply, base)
{
EXPECT_EQ(1, MyApp::multiply(1,1));
}
テストの書き方については、記事末尾で参考リソースを紹介しています。
テスト用のCMake設定
上のようなテストコードに MyApp.cpp
とGoogle Testをリンクしてビルドし、テスト用の実行ファイルを生成します。
CMakeの設定ファイルを、下の内容で作成します。
cmake_minimum_required(VERSION 2.6)
project(myapp-test)
# Google TestのCMakeプロジェクトを追加し、Google Testをビルド
# ※v1.7以前はディレクトリ構成が異なる
add_subdirectory(lib/googletest/googletest)
# MyApp.cppを識別名"myapp"でコンパイル
add_library(myapp ../MyApp.cpp)
# MyAppTest.cppからmyapp-test実行ファイルをビルド
add_executable(myapp-test MyAppTest.cpp)
# ライブラリをリンクする
target_link_libraries(myapp-test myapp gtest_main)
これで、準備が整いました。
テストのビルドと実行
コマンド例を次に示します:
# shell
mkdir -p test/build # ビルド用ディレクトリ作成
cd test/build
cmake .. # CMakeLists.txtの内容に基づき、Makefileを生成
make # myapp-test実行ファイルをビルド
./myapp-test # テスト実行
例えば、次のような Makefile
を用意しておくと、プロジェクトのルートディレクトリから簡単にテストの実行とクリーンアップが可能です。
.PHONY: test clean
TEST_BUILD_DIR := test/build
test: $(TEST_BUILD_DIR)
set -x && cd $(TEST_BUILD_DIR) && cmake .. && make && ./myapp-test
$(TEST_BUILD_DIR):
mkdir -p $(TEST_BUILD_DIR)
clean:
rm -rf $(TEST_BUILD_DIR)
参考
Google TestをXcodeから実行する方法
Google Testによる公式のガイドが下ですが、筆者は試していません。
ちなみに、本記事で示したCMakeによる環境が整っていれば、 cmake -G Xcode
でテスト実行可能なXcodeプロジェクトを生成することは可能です。
テストの書き方について
公式の入門ドキュメントは以下です:
v1.6向けには、日本語訳があります。
また、リポジトリ内のサンプルコードも参考にできるでしょう。