LoginSignup
0
0

More than 1 year has passed since last update.

テスト駆動開発を勉強するためM1 Mac miniでGoogle Testの環境を構築してみた

Last updated at Posted at 2023-03-29

テスト駆動開発を勉強するため、M1 Mac miniでGoogle Testの環境を構築してみました。テストコードのビルドのやり方がわかりづらかったので、記事にしてみます。

環境

  • M1 Mac mini

ツールインストール

Homebrewを使って cmake, gcc, g++をインストールします。

Terminal
brew install cmake
brew install gcc
brew install g++

2023.03.29の時点では g++-12、gcc-12 がインストールされました。

ライブラリのビルド

Google Testのライブラリをビルドします。

Terminal
git clone https://github.com/google/googletest.git
cd googletest
mkdir build
cd build
cmake -DCMAKE_C_COMPILER=/opt/homebrew/bin/gcc-12 -DCMAKE_CXX_COMPILER=/opt/homebrew/bin/g++-12 ..
make

先程インストールしたgcc-12、g++-12をcmakeのオプションで指定します。指定しないとMacにデフォルトで入っているgcc/g++が使われてしまうため、makeで正しくビルドできません。

ツールインストールが正しく実行されていれば、gcc/g++ は /opt/homebrew/bin にインストールされているはずです。

サンプルコードのビルド・実行

Google Testリポジトリに入っているサンプルコードを実行します。Google Testのリポジトリの中の googletest/samples にサンプルコードが入っています。

Terminal
cd ../googletest/samples
g++-12 -I../../googletest/include/  -L../../build/lib/ sample4.cc sample4_unittest.cc -lgtest -lgtest_main
./a.out
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from Counter
[ RUN      ] Counter.Increment
[       OK ] Counter.Increment (0 ms)
[----------] 1 test from Counter (0 ms total)

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

コンパイルは g++-12 を使い、ビルドオプションの-Lでビルドしたライブラリを指定、-Iでインクルードするファイルを指定します。

a.outを実行して「PASSED」が出力されたら成功です。あとは適宜 sample4.cc か sample4_unitttest.cc の中身を修正してテスト駆動開発をお楽しみください。

参考:Makefile

以下のようなMakefileを作るとビルドが楽になります。Makefileのフォルダに必要なファイル(*.cc, *.h)を入れて、makeと打つだけでビルドできます。

Makefile
TARGET = run_sample
SRCDIR = .
SRCS = $(shell find $(SRCDIR) -name "*.cc" -type f | xargs)
OBJS = $(SRCS:.cc=.o)
CFLAGO = -lgtest -lgtest_main
CFLAGC = -Wall -MMD -MP -O3
DEPENDS = $(OBJS:.o=.d)
INC = -I/opt/homebrew/include/
LIB = -L/opt/homebrew/lib/
CC = g++-12

.PHONY: all
all: $(TARGET)

-include $(DEPENDS)

# ターゲットファイル生成 $@:TARGET名 $^:全部のOBJS
$(TARGET): $(OBJS)
	$(CC) -o $@ $^ $(LIB) $(CFLAGO) 

# オブジェクトファイル生成 $^:全部のSRCS
$(OBJS): $(SRCS)
	$(CC) -c $^ $(INC) $(CFLAGC)

# (12).oファイル、実行ファイル、.dファイルを削除
.PHONY: clean
clean:
	-rm -f $(TARGET) $(OBJS) $(DEPENDS)

参照

Google Test入門ガイド

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0