見出し画像

Linux環境にGoogleTestを入れてみた

1. はじめに

 単体テストで役に立つライブラリが、xunitと呼ばれる単体テストフレームワークである。これを使用すると、アサーションやスタブなどの作成が楽になる。

 C/C++環境におけるxunit系ツールの代表格が、「GoogleTest」である。GoogleTestとは、Google社が作成したC/C++用の単体テストツールのことである。昨今、よく使用されているようだ。

 そこで、今回は、WSL環境(Ubuntu)にインストールする手順をまとめる。

2. GoogleTestの導入メリット

 GoogleTestとは、Google社が作成した単体テストフレームワークである。下記に、導入メリットを示す。

2.1 アサーションが記述できる

 アサーションとは、ある条件が一致することを確認することである。これは、C言語では、assert関数に相当する。例えば、assert(data == 10)と記述すると、assertのカッコ内の条件が真であればプログラムは先に進み、偽の場合はエラー終了する。

 基本的なアサーションは、assert関数で実現できるが問題がある。この関数では、カッコ内の条件が偽の場合は、プログラムが停止してしまうため、どこでテストが失敗しているかわかりづらい。例えば、30件テストケースを実行することを考える。この場合、途中でエラーとなると、何件テストが実行できたか確認できない。

 上記の場合でも、GoogleTestでは、テスト失敗してもプログラムを停止しないアサート関数がある。これらを上手に活用することで、効率よくテストができる。

2.2 モックが使用できる

 GoogleTestのプロジェクト内には、GoogleMockと呼ばれるモックフレームワークがある。モックとは、簡単に言うと「スタブ」のことで、ある関数をテストする場合、テスト用の別の関数に置き換えてテストできる。

 GoogleMockでは、オブジェクト指向のオーバーライドを使用することで、テスト時に関連するメソッドの戻り値を任意に書き換えることができる。

3. 前提条件

 今回の前提条件をまとめる。

 前提としては、WSLで構築したUbuntu環境を使用する。なお、環境の作成方法は、下記を参照してほしい。

 上記の環境にインストールするため、今回はWindows/Macは考慮しない。

3.1 事前準備

 GoogleTestをインストールする前に、事前準備をする。

3.1.1 Ubuntuのアップデート

 まず、Ubuntuのアップデートを行う。

sudo apt update
sudo apt upgrade -y

 上記のコマンドを叩き、アップデートを行う。

3.1.2 CMakeのインストール

 GoogleTestのプロジェクトは、ビルドして使用する。ビルドする方法は様々だが、今回は、CMakeというビルドツールを使ってみる。ただし、初期状態のUbuntuにはCMakeがないため、下記のコマンドからインストールする。

sudo apt install cmake

 上記のコマンドが正しく実行出来れば、CMakeのインストールが完了である。

3.1.3 C/C++コンパイラのインストール

 初期状態のUbuntuでは、C++のコンパイラであるg++が入っていない。そこで、下記のコマンドから、g++をインストールする。

sudo apt install g++

3.2 GoogleTestのダウンロード

 次は、GoogleTestをダウンロードする。今回は、GitHubからダウンロード、インストールする。

git clone https://github.com/google/googletest.git
cd googletest
mkdir build
cd build
cmake ..
make
sudo make install

 複数のコマンドがあるためわかりづらいが、やっていることは以下の通りである。
(1) GoogleTestをクローンする
(2) googletestディレクトリに移動する
(3) buildフォルダを作成する
(4) cmake & makeでビルドする
(5) インストールする

 上記の実行後、インストールが正しくできているか確認する。筆者は、「/usr/local/include」のディレクトリを確認し、下記のフォルダがあるか確認した。

 上記のディレクトリにgmock、gtestがあればインストールが完了である。

4. 動作確認

4.1 プログラムの準備

 環境構築が完了したので、動作を確認する。今回は、下記のプログラムから確認する(test.cpp)。

//test.cpp
#include <gtest/gtest.h>
int sum(int a, int b){
        return a + b;
}
TEST(TestCase, sum){
        EXPECT_EQ(2,sum(1,1));
}

 上記は、2つの引数a、bから、a + bを計算するsum関数をテストするプログラムである。sum関数はa + bを実行するだけなので、問題ないだろう。

 次が、見慣れないTEST()である。ここには、テストコードを記載する。また、アサーションとしてEXPECT_EQと書くことで期待値と実行結果が正しいことを確認できる。

 今回は、sum(1,1)が2であるか確認するテストコードとなっている。実行時に、「一致した場合は、テストはパス」「一致しない場合は、テストは失敗」となる。なお、今回は、「1 + 1 = 2」となるため、実行結果はパスする。

4.2 プログラムのコンパイル

 このプログラムをコンパイルする場合は、下記のようにする。

g++ test.cpp -lgtest_main -lgtest -lpthread -o test

 コンパイルエラーが出なければOKである。

4.3 実行結果の確認

 下記のコマンドから、プログラムを実行する。

./test

 実行すると下記のメッセージを出力する。

Running main() from /home/user/googletest/googletest/src/gtest_main.cc
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from TestCase
[ RUN      ] TestCase.sum
[       OK ] TestCase.sum (0 ms)
[----------] 1 test from TestCase (1 ms total)

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

 出力結果は、1ケース実行してテストがパスしていることを示している。これで、GoogleTestの動作確認をすることができた。

4. おわりに 

 今回は、Linux環境(WSL上のUbuntu)でGoogleTestをインストールする方法をまとめた。このツールを使用することで効果的に単体テストが実行できる。興味がある人は使用してみると良いだろう。


この記事が気に入ったらサポートをしてみませんか?