can't go to sleep

組み込み開発の多くをRubyで自動化することに興味があります

UnityとCppUTest part1

今、話題の書籍「テスト駆動開発による組み込みプログラミング」。
書籍の内容は非常に面白く魅力的なのですが、それを実践に移すとなると話は別です。
もっとも困難なのが、テスティングフレームワークの導入だと思われます。
また「どのテスティングフレームワークを使えば良いのか?」というツールの選定もなかなか困難です。
そこで、今回はテスティングフレームワークの簡単な比較をしてみます(基本的には人任せですが)。

上記書籍中で例に上がるテスティングフレームワークは、UnityとCppUTestの2つです。
(著者がCppUTestの作成者のひとりということで、CppUTestを推しています)
書籍中では、ストレスなく動かせるため、非常に優れたテスティングフレームワークだと記述されています。

一方で、wikipediaを確認するとC言語用のテスティングフレームワークが大量に記載されています。

ユニットテスト・フレームワーク一覧 - Wikipedia

wikipediaの○の数を見ると、c++testやTPTは多機能であり選定するならこれだ!と思いがちです。
しかし多機能になると、複数のチェックを1度のテストで実施する場合には、どうしても1回のテストに時間がかかってしまいます。
そうすると「気楽にテストする」という目的とは外れてしまいます。
また、そもそも

また他方で、Unityの公式サイトであるThrow the switchでもいくつかのテスティングフレームワークの比較をしています。
Throw The Switch! - White Papers - Comparing Unit Test Frameworks

このあたりを参考に、自分の業務に適したいテスティングフレームワークを検討すれば良いと思います。

ちなみに、私がテスティングフレームワークを検討するうえで重要だと考えている観点を以下に挙げます。

  1. テストの追加が容易であること
  2. テスト実施が容易であること
  3. MOCKファイル作成が容易であること
  4. フォルダ構造の変更が不要であること
  5. xUnit形式のxmlを出力可能なこと
  6. 有料・無料にはこだわらない(仕事で使用するため)

現在主として使用しているUnityでは、一応上記すべてを満たしており申し分ないかと考えています。
今後はCppUTestも評価し、UnityとCppUTestのどちらが、私にとって有用かを検討します。

また、上記4.のフォルダ構造の変更が不要であること、はUnityではそのままでは満たせなかったため、CMockの一部を変更する必要がありました。
そのあたりも、まとまれば公開したいと考えています。