4

C ++でDLLを開発していて、BoostTestLibrariesを使用してそのDLLの単体テストを実行したいと考えています。Boostテストのマニュアルをよく読みましたが、私は新しいので、次の質問があります。

DLLを開発しているのと同じVCプロジェクトにテストクラスを追加する必要がありますか?理想的にはこれを実行したいのですが、DLLにはないので混乱しています。一方、Boostテストを実行するmain()には独自のテストが必要です。main()では、このシナリオでは、ブーストテストの出力はどこに行きますか?(実際、私はこれを実際に実装しましたが、出力は表示されません:(そして問題を理解するのにほぼ2日を費やしましたが、成功しませんでした)

よろしく、

ジェーム。

4

2 に答える 2

4

これを行うには 3 つの方法があります。

  1. 別の返信が示唆することを確実に実行し、ライブラリを静的として構築できます。私はこの方法をお勧めしません。

  2. ソリューションには、1 つ以上の個別の単体テスト プロジェクトを含めることができます。これらのプロジェクトは、ライブラリとリンクし、ブースト テスト ライブラリの静的バージョンまたは共有バージョンとリンクします。各プロジェクトには、Boost.Test ライブラリによって提供されるか、手動で実装される main があります。

  3. 最後に別のオプションがあり、テスト ケースを直接ライブラリに入れることができます。Boost Test の共有バージョンとリンクする必要があります。ライブラリが構築されると、現在のように定期的に使用できるようになります。また、ライブラリに組み込まれたテスト ケースを実行することもできます。テスト ケースを実行するには、テスト ランナーが必要です。Boost Test は、「コンソール テスト ランナー」と呼ばれるものを提供します。一度ビルドするだけで、すべてのプロジェクトに使用できます。このテスト ランナーを使用すると、次のように単体テストを実行できます。

    test_runner.exe --test "your_lib".dll

    このアプローチの長所と短所をすべて理解する必要があります。単体テスト コードは、実稼働ライブラリの一部になります。少し大きくなりますが、必要に応じて本番環境でテストを実行できます。

于 2011-02-07T23:19:56.473 に答える
2

最初に DLL を静的ライブラリ ファイルとしてビルドできます。その後、それを使用して最終的な DLL を直接コンパイルし、ブースト テストを含む実行可能ファイルを作成できます。これは、boost.build を使用した例です。

lib lib_base
    : # sources
        $(MAIN_SOURCES).cpp  # Sources for the library.
    : # requirements
        <link>static
    : : ;

lib dll_final
    : # sources
        lib_base
        $(DLL_SOURCES).cpp   # Sources for DllMain .
    : # requirements
        <link>shared
    : : ;

unit-test test_exe
    : # sources
        lib_base
        $(TEST_SOURCES).cpp  # Sources for the unit tests.
    : # properties
        <library>/site-config//boost/test
    ;

DllMainに重要なロジックを持たないように注意する必要がありますが、それは通常は悪い考えです。

于 2011-02-04T08:21:31.407 に答える