5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C言語で書いたプログラムをgoogletestでテストできるようにした

Last updated at Posted at 2024-08-25

はじめに

こんにちは。

先日、データ構造について再度勉強する機会があり、C言語を用いて線形リストに関するプログラムを書いていました。

作成した線形リストのプログラムが正しいかどうかを確認するために、main.cに毎回シナリオを書き込んで実行し、その結果を確認していましたが、とても手間に感じました。

そこで
C言語で書いたプログラムのテストをコマンド1つで実行できるような、C言語の環境を整えました。

私自身、あまりC言語やその背景知識に詳しくありません。
上記のような問題にぶつかり、調べながら以下の環境を作成したので、間違っている部分が多々あると思います。間違いや改善点を見つけたらコメントしていただけると嬉しいです。

ぜひ、ご参考にしてください!

作った開発環境

下のURLが今回開発した環境です。

こちらのレポジトリにアクセスしてフォルダごとコピーしてください。README.mdにもあるとおり、

make test

1コマンドで実際にテストを実行できます!
(Dockerの環境構築が必要です。)

使い方

README.mdを見ていただければ、大体わかると思いますが、

  1. srcディレクトリに適切にソースコードを書く
  2. testsディレクトリに対応するテストコードを作成する
  3. tests/CMakeLists.txtに設定を追加する

をします。
その後、make testを実行すればテストが開始します。

全てのテストがパスすればテスト用に作成したdockerのビルドイメージが削除され終了し、
何かのテストに失敗すればエラーがログに表示されます。

簡単な説明

使用したテストフレームワーク

今回はgoogletestを使用しました。

調べたところC言語の単体テストのフレームワークにはCUnitというものもあるそうですが、googletestの方が更新が頻繁に行われているのと、ドキュメントが豊富であると考え、googletestを採用しました。

ビルドツール

ビルドツールとしてCMakeを利用しました。正直よくわかっていません。他にいいやつがあったら教えてください。(ビルドがなんなのかきちんと説明できるかも怪しい。)

Docker

誰でも簡単に環境を再現できる方が良いと思い、Docker上で環境が構築されるようにしました。

最後に

C言語は大学の授業で軽く触った程度なので、よくわからないことが多かったですが、ひとまず形になるものを作れてよかったです。間違いや修正点が多くあるダメダメだと思いますが、ある程度のプログラムの単体テストだったらこれで十分な気がします。

ここまで読んでいただきありがとうございました。

P.S.

冒頭にも述べましたが、私は作成したプログラムが正しいかを確認するために、main.cに毎回シナリオを書き込んで実行し、その結果を確認していました。

一回の修正に数分しかかからないので、そこまで大変な作業ではないのですが、何回も繰り返すとストレスが溜まる作業です。

周辺技術について詳しくない状態からのスタートだったので、開発環境を整えるのに数時間がかかりましたが、結果的にはテストを数秒で終わらせられるようになりました。これこそまさに

[エンジニアあるある]
3分でできる作業を3時間かけて3秒でできるようにする奴

なのかもしれません。

5
1
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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?