1. ホーム
  2. c

[解決済み] Cコードの単体テスト【終了しました

2022-03-22 17:15:08

質問

この夏、私はストレートCで書かれた組み込みシステムに取り組みました。それは、私が勤める会社が引き継いだ既存のプロジェクトでした。 私はJUnitを使ってJavaでユニットテストを書くことに慣れていますが、既存のコード(リファクタリングが必要)とシステムに追加された新しいコードに対してユニットテストを書く最良の方法については途方に暮れていました。

JUnit を使って Java コードをユニットテストするのと同じように、プレーンな C コードをユニットテストするプロジェクトはありますか? 特に組み込み開発(arm-linuxプラットフォームへのクロスコンパイル)に適用されるような洞察があれば、非常に感謝されます。

どのように解決するのですか?

C言語のユニットテストフレームワークの1つは チェック C言語のユニットテストフレームワークのリストはこちらです。 こちら を、以下に転載します。 ランタイムが持っている標準ライブラリ関数の数によって、これらのいずれかを使用できる場合とできない場合があります。

<ブロッククオート

AceUnit

AceUnit (Advanced C and Embedded Unit) は、快適なCコードのユニットテストフレームワークであると自称しています。JUnit 4.xを模倣し、リフレクションのような機能を含んでいます。AceUnitは、リソースに制約のある環境、例えば組み込みソフトウェア開発で使用でき、重要なことは、標準のヘッダーファイルを一つも含めることができず、ANSI / ISO Cライブラリから標準のC関数を一つも呼び出すことができない環境でも問題なく動作することである。また、Windowsへの移植も可能です。作者はそのような機能を追加することに興味を示していますが、シグナルをトラップするためにフォークは使用しません。詳細は AceUnitホームページ .

GNU Autounit

ユニットテストを別のアドレス空間で実行するためのフォークなど、Check とほぼ同じ路線です (実際、Check の原作者は GNU Autounit からそのアイデアを借りました)。GNU AutounitはGLibを広範囲に使っているので、リンクなどは特別なオプションが必要ですが、特にGTKやGLibを既に使っている人にとっては大きな問題ではないかもしれません。詳しくは GNU Autounit ホームページ .

cUnit

GLib も使用しますが、ユニットテストのアドレス空間を保護するためにフォークを使用しません。

CUnit

標準的なC言語。Win32 GUIの実装を予定しています。現在、ユニットテストのアドレス空間をフォークしたり、その他の方法で保護することはありません。開発初期段階。を参照してください。 CUnitホームページ .

CuTest

ソースツリーにドロップする.cと.hのファイルを1つずつ持つだけのシンプルなフレームワークです。を参照してください。 CuTestホームページ .

CppUnit

C++のユニットテストフレームワークで、Cコードのテストにも使えます。安定していて、活発に開発されており、GUIインターフェースを持っています。C++にCppUnitを使わない主な理由は、第一にかなり大きいこと、第二にテストをC++で書かなければならないこと、つまりC++コンパイラが必要であることです。もし、これらが気にならないのであれば、他のC++ユニットテストフレームワークと一緒に検討する価値があります。詳細は CppUnitホームページ .

エンブユニット

embUnit (Embedded Unit) は、組み込みシステム用のもうひとつのユニットテストフレームワークです。こちらは、AceUnitに取って代わられたようです。 エンベデッドユニットホームページ .

MinUnit

最小限のマクロのセット、これだけです。ポイントは、コードのユニットテストがいかに簡単であるかを示すことです。を参照してください。 MinUnitホームページ .

安藤さんのCUnit

かなり新しいCUnitの実装で、まだ開発の初期段階にあるようです。詳細は 安藤さんのCUnitホームページ .

このリストの最終更新日は2008年3月です。

その他のフレームワーク

CMocka

CMockaはモックオブジェクトをサポートしたC言語用のテストフレームワークです。使いやすく、設定も簡単です。

参照 CMockaホームページ .

基準

Criterion は、テストの自動登録、パラメータ化されたテスト、セオリーをサポートし、TAP や JUnit XML などの複数のフォーマットで出力できるクロスプラットフォームの C ユニットテストフレームワークです。各テストは独自のプロセスで実行されるため、必要に応じてシグナルやクラッシュを報告したりテストしたりすることができます。

をご覧ください。 クライテリオンホームページ をご覧ください。

HWUT

Makefileの作成、最小限の「反復表」でコーディングされた膨大なテストケースの生成、ステートマシンのウォークイン、Cスタブの生成などをサポートします。一般的なアプローチは、かなりユニークです。判定は「良い標準出力/悪い標準出力」に基づいて行われます。しかし、比較機能は柔軟である。したがって、どのようなタイプのスクリプトでもチェックに使用することができる。また、標準出力を生成できる言語であれば、どのようなものにも適用できる。

参照 HWUTホームページ .

CGグリーン

C と C++ のための、現代的で移植性の高い、言語横断的なユニットテストとモッキングのフレームワークです。BDD記法、モッキングライブラリ、単一プロセスでの実行機能(デバッグを容易にする)などをオプションで提供します。テスト関数を自動的に発見してくれるテストランナーも用意されています。しかし、プログラム的に自分で作ることもできる。

これらすべての機能(およびその他)については CGreenマニュアル .

ウィキペディアには、C言語のユニットテストフレームワークの詳細なリストが掲載されています。 ユニットテストフレームワークの一覧です。C