web-dev-qa-db-ja.com

CコードのテストにGoogle Testは大丈夫ですか?

だから、私は自分が関わっているC++プロジェクトでGoogle Testを気に入って楽しんでいるようになりました。私はまっすぐなC(ライブラリ)になる新しいプロジェクトを立ち上げているだけで、今のところ理由はわかりません。 C++フレームワークであっても、Google Testを継続して使用しないでください。 C++コンパイラを使用可能にしても問題はありません。

ストレートCコードのテストにGoogle Testを使用すべきではない具体的な理由はありますか?

ありがとう。

60
Jason

C++テストフレームワークを使用してCコードをテストすることは非常に一般的です。 主題に関する主要な本 はこのアプローチに従います。私は過去にgoogletestを広範囲に使用してCコードを単体テストしましたが、推奨できます。

私はそれについて有用なブログ記事を書きました: http://meekrosoft.wordpress.com/2009/11/09/unit-testing-c-code-with-the-googletest-framework/

58
mikelong

GoogleのすべてのC++コードと同様に、Google Testは例外を使用しないため、例外の安全フローは問題になりません。ヘッダーがC++互換(C++キーワードを使用せず、正しいリンケージでシンボルをエクスポートする)であれば、問題ありません。

13
Alex B

別のポイントを追加すると思いました。gtestはC++であるため、テスト対象のCヘッダーをC++として解析することになります。これは、テストがヘッダーがCから消費されることを保証しないことを意味します。最近、私が作成しているCライブラリでこれに遭遇しました。

4
Kim Gräsman

ジェイソン、そのことに注意してください!!! :D

Meekrosoftが言ったように、はい、可能です。私も彼のウェブサイトを使用しようとしました。動作しますが、1つの大きな問題があります。

GTestはオブジェクト指向ツールであり、C言語はそうではありません!

たとえば、GTestには、オブジェクトをパラメーターとして要求する多くの関数(API全体の80%)があります。たとえば、

EXPECT_CALL(turtle, PenDown())              // turtle is object(class) and PenDown() is method of that object
      .Times(AtLeast(1));

gTestウェブサイト https://code.google.com/p/googlemock/wiki/ForDummies から、expect_equal、expect_bigger_thanなどのマクロのみを使用します...

ツール CMocka (または他のCユニットテストツール)をお勧めします。また、グーグル(グーグル以外の開発者のグループによって変更)からのものであり、C言語用に直接作成されます。 Cタイプのソースコードをテストする場合に使用します。

これがお役に立てば幸いです.. :-)良い一日を.. :-)

4
Zdeno Pavlik

名前を付けられませんでした。 「通常の」Cにはないものがあると思います。たとえば、TestCaseは特定のクラスから派生したものだと思います。しかし、テスト内で好きなものをテストできるので、なぜCではないのですか?

3
Friedrich