18

私は手続き型C/C++プロジェクトに取り組んでいます。パブリックインターフェイスは4つの関数で構成されており、それぞれにかなり複雑なタスクがあります。cpp名前のない名前空間の同じファイルで宣言されたヘルパー関数があります。使用されているテストフレームワークはGTestです。

ただし、これらのヘルパー関数の一部は、独自の単体テストを必要とするほど複雑になっています。通常、これらのヘルパーを独自のテスト可能なユニットにリファクタリングしますが、プロジェクトの要件では、すべてを1つにまとめる必要がありcpp、指定された関数のみを公開できます。

結合を最小限に抑え、プロジェクトの要件に可能な限り従いながら、ヘルパー関数を単体テストできる方法はありますか?

私が持っていた可能な解決策は、マクロを使用して、名前空間をテスト用の名前付き名前空間に変換し、本番用に名前空間なしに変換することでした。しかし、それは私が望むよりも少し厄介に思えました。

4

1 に答える 1

17

匿名の定義と宣言はnamespace、同じ翻訳単位内でのみ表示されます。

これらのプライベート関数を単体テストするには、2 つの方法があります。

#includeファイル全体.cppをテストでき_test.cppます。(ファイルを#includeing すること.cppは、コードを再利用する良い方法ではありません。本番コードではこれを行うべきではありません!)

おそらく、より良いアプローチは、プライベート コードを、プロジェクトが通常使用する に移動しfoo::internal namespacefooプライベート宣言をファイルnamespaceに入れることです。-internal.h本番.cppファイルとテストにはこの内部ヘッダーを含めることが許可されていますが、クライアントには許可されていません。このようにして、クライアントにリークすることなく、内部実装を完全にテストできます。

于 2013-02-09T09:11:19.580 に答える