YU2TA7KA's BLOG ~take one step at a time~

派生開発、組み込み開発周りのこと。

Google TestをUbuntu上のeclipseにて実行

はじめに


2013年に発売されたモダンC言語プログラミングを読書中です。その中でC言語の単体テストツールとして、Google Testが紹介されております。発売から時間が経過し、インストール方法が変わっていたので、手順メモを記載します。

環境

OS Ubuntu 20.04.1 LTS
IDE Eclipse IED Version 2020-12(4.18.0)

OpenJDK 11とEclipseのインストール

OpenJDK 11 のインストールと設定(Ubuntu 上)
Eclipse(2019年12月版)のインストール,日本語化,基本操作(Ubuntu 上)
上記のWebページがわかりやく、参照させていただきました。

Google Testのインストール

下記GitHubからファイルをcloneしてきて利用します。書籍内ではzipファイルをダウンロードしてきて利用する方法でした。インストール手順はGitHubに記載があり、引用します。事前にCMakeをインストールしておく必要があります。
github.com

git clone https://github.com/google/googletest.git -b release-1.10.0
cd googletest        # Main directory of the cloned repository.
mkdir build          # Create a directory to hold the build output.
cd build
cmake ..             # Generate native build scripts for GoogleTest.
make
sudo make install    # Install in /usr/local/ by default

EclipseとGoogle Testの連携

本題です。

1. includeディレクトリの指定

Project Explorer(左のペイン)で対象のプロジェクトを右クリック、最下段にある[Properties]をクリック。
[C/C++ General] - [Paths and Symbols]を選びます。真ん中付近ので[includes]のタブを選択し、[Language]から[GNU C++]を選び[Add]を選択します。
ここまでは書籍と同じです。ここで選択するパスが変わっています。下図のように、[/usr/local/include]を指定します。このパスはGoogle Testのインストール先によって変わりますが、デフォルトだと[/usr/local/include]になります。
f:id:yuji-tanaak:20210124060825p:plain

2. ライブラリパスの指定

1. で開いている[Properties]画面で、[Library Paths]のタブを選択し、右側の[Add]をクリックします。

f:id:yuji-tanaak:20210124061321p:plain
ライブラリパスの設定画面

[File system]をクリックして、Google Testをインストールしたディレクトリを選び、[OK]をクリックします。ここで、インストールしたディレクトリとはgit cloneしてきたディレクトリになります。例えば、/home/user/ディレクトリでgit cloneした場合、/home/user/googletest が指定するディレクトリになります。下記に私の環境での設定画面を示します。

f:id:yuji-tanaak:20210124061757p:plain
ライブラリパスを設定した画面

3. ライブラリの追加

1. で開いている[Properties]画面で、[Library]のタブを選択し、右側の[Add]をクリックします。そして、[gtest]と入力し[OK]をクリックします。同様に再度[Add]で追加画面を開き[pthread]と入力し[OK]をクリックします。
f:id:yuji-tanaak:20210124062228p:plainf:id:yuji-tanaak:20210124062240p:plain

f:id:yuji-tanaak:20210124062304p:plain
ライブラリを設定した画面

以上で、プロジェクトへの設定は完了です。

Google Testの利用

設定ができたので、コード内にテストコードを埋め込んで利用します。add.h, add.c, add_test.ccの3ファイルを用意します。コードは下記です。add.cは意図的にfailさせるために0を返すようにしています。

#ifndef ADD_H_
#define ADD_H_

#ifdef __cplusplus
extern "C"{
#endif

int add(int i1,int i2);

#ifdef __cplusplus
}
#endif

#include "add.h"

int add(int i1,int i2){
	return 0;
}

#include "gtest/gtest.h"
#include "add.h"

TEST(AddTest, onePlusTwoGivesThree){
	EXPECT_EQ(3, add(1,2));
}

int main(int argc, char **argv){
	::testing::InitGoogleTest(&argc, argv);
	return RUN_ALL_TESTS();
}

コードができたら、ビルド+実行してください。[Ctrl+F11]でビルド+実行が可能です。下記のようなテスト失敗画面が表示されるはずです。
f:id:yuji-tanaak:20210124063147p:plain
以上で、単体テストがC言語でできました!!

おわりに

書籍と現在が微妙に変わっていたので、その差分を記載しました。GitHub経由でGoogle Testを利用する方の参考になれば幸いです。