はじめに
こんにちは。
先日、データ構造について再度勉強する機会があり、C言語を用いて線形リストに関するプログラムを書いていました。
作成した線形リストのプログラムが正しいかどうかを確認するために、main.c
に毎回シナリオを書き込んで実行し、その結果を確認していましたが、とても手間に感じました。
そこで
C言語で書いたプログラムのテストをコマンド1つで実行できるような、C言語の環境を整えました。
私自身、あまりC言語やその背景知識に詳しくありません。
上記のような問題にぶつかり、調べながら以下の環境を作成したので、間違っている部分が多々あると思います。間違いや改善点を見つけたらコメントしていただけると嬉しいです。
ぜひ、ご参考にしてください!
作った開発環境
下のURLが今回開発した環境です。
こちらのレポジトリにアクセスしてフォルダごとコピーしてください。README.md
にもあるとおり、
make test
の1コマンドで実際にテストを実行できます!
(Docker
の環境構築が必要です。)
使い方
README.mdを見ていただければ、大体わかると思いますが、
-
src
ディレクトリに適切にソースコードを書く -
tests
ディレクトリに対応するテストコードを作成する -
tests/CMakeLists.txt
に設定を追加する
をします。
その後、make test
を実行すればテストが開始します。
全てのテストがパスすればテスト用に作成したdockerのビルドイメージが削除され終了し、
何かのテストに失敗すればエラーがログに表示されます。
簡単な説明
使用したテストフレームワーク
今回はgoogletest
を使用しました。
調べたところC言語の単体テストのフレームワークにはCUnit
というものもあるそうですが、googletest
の方が更新が頻繁に行われているのと、ドキュメントが豊富であると考え、googletest
を採用しました。
ビルドツール
ビルドツールとしてCMake
を利用しました。正直よくわかっていません。他にいいやつがあったら教えてください。(ビルドがなんなのかきちんと説明できるかも怪しい。)
Docker
誰でも簡単に環境を再現できる方が良いと思い、Docker上で環境が構築されるようにしました。
最後に
C言語は大学の授業で軽く触った程度なので、よくわからないことが多かったですが、ひとまず形になるものを作れてよかったです。間違いや修正点が多くあるダメダメだと思いますが、ある程度のプログラムの単体テストだったらこれで十分な気がします。
ここまで読んでいただきありがとうございました。
P.S.
冒頭にも述べましたが、私は作成したプログラムが正しいかを確認するために、main.c
に毎回シナリオを書き込んで実行し、その結果を確認していました。
一回の修正に数分しかかからないので、そこまで大変な作業ではないのですが、何回も繰り返すとストレスが溜まる作業です。
周辺技術について詳しくない状態からのスタートだったので、開発環境を整えるのに数時間がかかりましたが、結果的にはテストを数秒で終わらせられるようになりました。これこそまさに
[エンジニアあるある]
3分でできる作業を3時間かけて3秒でできるようにする奴
なのかもしれません。