0

TEST_GROUP_BASE を使用して共有基本クラスを作成することにより、コードの重複を削減しようとしました。この TEST_GROUP_BASE を複数のテスト クラスで使用しようとすると、「getwchar」と「putwchar」について不平を言うリンカ警告が表示されます。一貫性のない dll リンクと、これらの関数の複数の定義、および他の多くの「char」/ 'wchar' ペア (例: strchr/wcschr、strpbrk/wcspbrk)。TEST_GROUP_BASE マクロを使用するテスト ファイルを 1 つだけ含めると、リンカ エラーは表示されません。

基本クラスは、すべてのメンバー関数がインライン化された .h ファイルで TEST_BASE として定義されます。この .h ファイルは、共有 TEST_BASE を組み込むために使用される TEST_GROUP_BASE マクロを使用して、派生テスト ファイルに含まれます。私は何かを逃したことがありますか?

TEST_GROUP_BASE が使用されている例を見つけることができなかったので、構成の重要な部分を見逃したかどうかはわかりません。レガシ C コードをテストしていますが、c/c++ が正常にリンクされていることを示唆する単純なテストにパスするため、製品コードへのすべての参照は extern "C" 中かっこ内で行われます。

誰かが考えられる原因を提案したり、TEST_GROUP_BASE が他の場所でどのように使用されているかを示すオープンソースの例を教えてもらえますか?

開発環境はVS2010です。

4

1 に答える 1

0

putwchar と getwchar でエラーが発生する理由はよくわかりません。これはおそらく TEST_BASE と TEST_GROUP_BASE とは関係ありませんが、おそらくそれらがインラインであり、ヘッダー ファイルが異なるリンケージに含まれていることに関連しています。コード例がないと、特に TEST_GROUP_BASE が 1 つだけで機能すると述べたように、さまざまなリンケージの問題がどこから発生するのかを把握するのは困難です。

ただし、おそらくこの問題を解決する最善の方法は、すべての TEST_BASE 関数をヘッダー ファイルにインラインで配置しないことです。TEST_BASE マクロは、実際には「struct testBaseClass : public Utest」の非常に単純な置き換えです。したがって、TEST_BASE は、単に Utest からサブクラス化された任意のクラスです。つまり、単純に実装を cpp ファイルに入れることができます。

TEST_GROUP_BASE の使用法があまり見つからない理由の 1 つは、多くの人 (私を含む) が使用しないことを推奨しているためです。多くの場合、再利用したい部分を別のクラスに入れ、そのクラスを TEST_GROUP で (派生させるのではなく) 使用する方がより柔軟です。これにより、さまざまなテストで再利用できる多くの小さな「フィクスチャ」クラスが可能になります。

お役に立てれば。

于 2012-12-13T03:04:56.673 に答える