1

ここで質問するのは初めてなので、質問を改善できるかどうか教えてください..

ソース ファイルを CMock によって生成されたソース ファイルのモック バージョンに置き換える必要がある単体テストをクリーンにビルドする方法についてのガイダンスを探しています。これが必要になるのは、CMock では、モックを使用する単体テスト コードを元のソースではなくモック ソースにリンクする必要があるためです。

たとえば、テスト ソース ファイル test.c で foo() を呼び出す関数 test_me() をテストしている場合、foo() をモックするには、コンパイルする必要があります。test_test_me: test_me.c, Mockfoo.c, and test.c.

test_me() は通常、次のようにコンパイルされます。test_me: test_me.c and foo.c

Mockfoo.c は、foo.h を使用して CMock が提供する Ruby スクリプトを使用して生成されます。

ご覧のとおり、テスト プログラムを作成するには、 をfoo.cに置き換える必要があります。Mockfoo.c は、test_test_me が元の foo 呼び出しではなく、モックされた foo 呼び出しにリンクできるようにするために必要です。依存関係の数が増えると、ソースの置き換えが難しくなります。Mockfoo.ctest_test_me

たとえば、test_me が foo.o、bar.o、および baz.o で構成されるライブラリ libfoo.a の foo、bar、および baz を使用し、foo への呼び出しを単にモックしたい場合、ビルドする必要があります。コンパイル ユニット Mockfoo.o、bar.o、および baz.o を含む libfoo.a をtest.o、モック foo 呼び出しを使用する my にリンクします。これは、モックの順列 (例: Mockfoo、Mockbar、ただし baz ではない) と、異なる automake ルール、フラグなどを持つ大きなソース ツリーがある場合、さらに複雑になります。

さらに、単体テストにはモックが必要になることが多いため、モックの追加は簡単でなければなりません。

いくつかのコンテキスト:

コードがリファクタリングされた場合、または参加したばかりの大規模な C プロジェクトに新しいコードが追加された場合に、CMock/Unityを使用して単体テストを追加することに興味があります。

このプロジェクトは現在、ビルド ツールとして Automake を使用しており、そのまま使用されます。

Automakeは初めてです。私は SCons と CMock に精通しています。

4

1 に答える 1