2

リンクの依存関係を zlibwapi.lib に追加すると、すべての単体テストが失敗し、「テストを実行するための実行コンテキストをセットアップできませんでした」というメッセージが表示されます。残念ながら、このメッセージには、問題をトラブルシューティングするための十分な詳細が示されていません。テスト実行コンテキストをセットアップできなかった理由を具体的に知ることは非常に役立ちます。たとえば、some_reason のために some.dll を読み込めません。

他の投稿では、すべての依存ライブラリが同じディレクトリにある必要があると指摘されていますが、これで問題は解決しません。dumpbin.exe ツールは、リンクの依存関係を zlibwapi.lib に追加しても、zlibwapi.dll がインポート セクションに追加されるだけであることを明確に示しています。また、zlibwapi.dll のインポート セクションには、単体テスト ライブラリのインポート セクションに既に存在していた KERNEL32.dll と MSVCR110D.dll のみが含まれています。非標準の依存ライブラリはすべて単体テスト ランタイム フォルダーにあり、それでも失敗します。

この問題は、zlib をダウンロードして Visual Studio 2012 SP3 でビルドし、ネイティブ ユニット テストを追加することで再現できます。具体的には:

  1. http://www.zlib.netから zlib128.zip をダウンロードします。

  2. これらのヒント ( http://bugbeebox.com/2012/12/29/building-static-zlib-v1-2-7-with-msvc-2012/ ) に従って、Visual Studio 2012 でビルドしてください。

  3. zlibunittest という名前のネイティブ ユニット テスト プロジェクトを ...\zlib-1.2.8\contrib\vstudio\vc11 に追加します。Build\Configuration Manager で、新しいプロジェクト用の x64 ビット プラットフォームを追加し、[ビルド] チェックボックスがオンになっていることを確認して、アクティブなソリューション プラットフォームとして x64 を選択します。zlibunittest から zlibvc にプロジェクトの依存関係を追加して、正しいビルド順序を確保することも役立ちます。

  4. unittest1.cpp の TestMethod1 を次のように変更します。

    TEST_METHOD(TestMethod1)
    {
        Assert::AreEqual(0, 0);
    }
    

    Test --> Test Settings --> Default Processor Achitecture を x64 に設定し、テスト エクスプローラーで正しく動作することを確認します。

  5. zlibunittest 構成プロパティを次のように変更します。

    a) ..\..\..\..\; を追加します。C/C++ --> 一般 --> 追加のインクルード ディレクトリに移動すると、zlib.h が見つかります。b) $(OutDir); を追加します。Linker --> General --> Additional Library Directorys に移動すると、zlibwapi.* が見つかります。c) zlibwapi.lib を追加します。リンカーへ --> 入力 --> 追加の依存関係。d) copy ..\x64\ZlibDllDebug\zlibwapi.* $(OutDir) を Build Events --> Pre-Build Event に追加して、zlib ランタイム ライブラリが単体テスト ライブラリ バイナリと同じディレクトリに配置されるようにします。

  6. unittest1.cpp の TestMethod1 を次のように変更します。

    TEST_METHOD(TestMethod1)
    {
        Assert::AreEqual(0, 0);
        gzopen(NULL, NULL);
    }
    

    gzopen への NULL 引数は、そこまで到達しないため、このエラーには関係ありません。

  7. テスト エクスプローラーで単体テストを実行すると、"テストを実行するための実行コンテキストをセットアップできませんでした" という一般的なエラーが表示されます。

  8. ここで、TestMethod1 の gzopen 呼び出しをコメントアウトし、追加のリンカー依存関係から zlibwapi.lib を削除して、エラーが消えるのを確認します。

ZLib を Visual Studio 2012 Native Unit Tests で動作させる方法を知っている人はいますか?

少なくとも、この特定のエラー、つまり単体テストの実行時ログの詳細を知る方法を知っている人はいますか?

4

1 に答える 1