![見出し画像](https://assets.st-note.com/production/uploads/images/45342209/rectangle_large_type_2_6ce2ac85484a510c958932264905d0ff.png?width=1200)
CppUTestを試してみた
※本記事は2017年に別ブログで掲載した記事のリメイク版です。
T・D・D!T・D・D!
TDD(テスト駆動開発)やりたいなー。でもC言語で良さげなテスティングフレームワークってなんだろ。しかもいま俺が触ってるのって、組み込み系で先祖代々受け継がれしレガシーコードだしなぁ。どーしたもんだろーか。
と思ってた矢先に、良さげな本を見つけたので、早速購入してみた私だよ。
そいつを読み進めてると「C言語のテスティングフレームワークはUnity(ゲームエンジンじゃない方の)とかCppUTestがおすすめだよ!」という話が載ってたので、とりあえずどっちも触ってみた。Unityはゲームの方のやつと被ってなんか嫌だったので、CppUTestを本格的に使ってみる事に。
このフレームワーク、Cppと銘打ってはあるものの、ちゃんとC言語でも使えるらしい。CppUTest公式からソース落としてきたらVisualC++用のプロジェクトが入ってたので、そのままビルドしたらlibが出てきたやっほい!さっそくそいつをVCプロジェクトに組み込んで使ってみる事にしてみた。
includeしてくるヘッダはよく分からんので手探り。あと当たり前なんだけど、C++からC言語の関数を呼び出す時は、呼出規約に気をつける(cdecl)。とりあえず魔法のおまじない「extern “C”」をつけときゃなんとかなるって、じっちゃがいってた。
実際使ってみてどうだったか
2017年に実戦投入して、2020年までの3年ぐらいお仕事で使ってたのだけれど、一般的なxUnitの考え方で使えるので、特に詰まる事はなかった感じ。
レガシーコードはゴリ押しチェックになるのはもう仕方ないとして、新規に設計/実装する部分は極力Windows上でユニットテストしてから実機に流し込むようになったので、疑心暗鬼になりながら実機デバッグする機会は減った。
あと、テストが少しずつ通るようになっていく様は一種のカタルシスというか達成感があるし、仕様変更した後のバグにも気付きやすいのが強い。みんなもやろうぜ、TDD。
ちなみに2021年現在はCppUTestではなくGoogleTestに置き換えたりVSCodeと連携させてたりするので、そのあたりの話もそのうち書きたい所存。