3

共有ライブラリによってエクスポートされない関数をテストするメカニズムを提供するフレームワーク/ライブラリがあるかどうかを考えていました。

共有ライブラリの「t」セクションにリストされている関数の動作をテストしたい。「T」セクションの関数をテストするには、cppunit を使用しました。

テスト シナリオ: " __ attribute __ ((visibility("default"))) " を使用してエクスポートされたクラスがあり、" __ attribute __ ((visibility("hidden"))) " を持つ別のクラスの変数を宣言します。同じライブラリで定義されています。「 __ attribute __ ((visibility("hidden"))) 」属性を持つクラスをテストしたい。

ライブラリのプログラミング言語は c++

コンパイラ gcc 4.1.2

プラットフォーム RedHat/Solaris

4

2 に答える 2

6

単体テストは、テストするコードの詳細な知識を持っていると想定されているため、単体テストでは、コードの通常のユーザーが利用できないトリックを使用することもできます。

ここで使用できるトリックは次のとおりです。

  • 最初にライブラリでテスト対象のコードをビルドせずに、単体テストとテスト対象のコードが単一の実行可能ファイルとしてリンクされていることを確認します。
  • 単体テスト用にビルドするときに、プリプロセッサ マクロを使用して可視性属性を無効にします。
于 2013-03-15T11:01:13.623 に答える
2

出荷しているのと同じバイナリ ファイルを使用してこれらの機能をテストしたい場合は、実用的な解決策を 1 つだけ知っています。それは、何らかのメンテナンス ハッチをライブラリに組み込むことです。

つまり、テストしたい内部関数を呼び出すいくつかのパブリックにエクスポートされた関数を lib に追加します。関数の名前を使用して、これらがテスト目的のみであることを明確にします。ライブラリの「通常のユーザー」は使用しないでください。そのメソッドのドキュメントを内部に保管して、部外者がそれらを使用するのを非常に困難にします。たとえば、接頭辞「TEST_」で始まるすべてのメソッドは通常のユーザーが使用するものではなく、リリースごとに変更される可能性があるという明確な警告を公式ドキュメントに追加します。

そして、誰かがその方法を使用することを非常に無知であるとしても、気にしないでください-そのような人々が自分自身を足に撃ち込むのを防ぐことはできません.

于 2013-03-15T16:45:00.847 に答える