[解決済み] Cコードの単体テスト【終了しました
質問
この夏、私はストレート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
関連
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
[解決済み] Code::Blocks アプリケーションをコンパイルできない
-
[解決済み] ソケットアクセプト - "開かれているファイルが多すぎる"
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] C言語で関数をパラメータとして渡すにはどうすればよいですか?
-
[解決済み] C# "internal "アクセス修飾子でユニットテストを行う場合
-
[解決済み] C言語でオブジェクト指向のコードを書くとしたら、どのようにすればよいのでしょうか?[クローズド]
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] フリーは、どのように無料化を知っているのですか?
-
[解決済み] ファイルシステムに依存するコードの単体テスト
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Cエラー [エラー] 代入_Ashesの左オペランドにlvalueが必要です-プログラマーズ・シークレット
-
関数 'malloc' の暗黙の宣言に対する解決策
-
[解決済み] PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init ( &mutex, param )
-
[解決済み] Xcode - 警告。C99 では関数の暗黙の宣言は無効です。
-
[解決済み] C言語の書式指定子 %ul と %lu の違いは何ですか?
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] 難読化Cコードコンテスト2006。sykes2.cの解説をお願いします。
-
[解決済み] Cコードの単体テスト【終了しました
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] なぜ16進数には0xがつくのですか?