web-dev-qa-db-ja.com

Visual Studio 2005でGoogle C ++テストフレームワーク(gtest)をセットアップする方法

Webサイトには文書化されておらず、フレームワークのセットアップに問題があるようです。誰かがサンプルプロジェクトのセットアップの段階的な紹介を見せてもらえますか?

81
knaser

Arlaharenが言ったことは基本的に正しいです。ただし、リンカーエラーを説明する部分を省略しました。まず、ランタイムライブラリとしてCRTを使用せずにアプリケーションをビルドする必要があります。とにかくこれを行う必要があります。アプリケーションの配布が本当に簡単になるからです。これを行わない場合、すべてのユーザーはVisual C++ランタイムライブラリをインストールする必要があり、そうしない人はシステムにミステリアスなDLLが欠けていることについて不平を言うでしょう...リンクするのに余分な数百キロバイトかかりますCRTを静的に使用すると、後のサポートで頭痛の種を大幅に減らすことができます(この点については私に信頼してください-大変な方法で学習しました!)。

とにかく、これを行うには、ターゲットのプロパティ-> C/C++->コード生成->ランタイムライブラリに移動し、リリースビルドでは「マルチスレッド」として設定し、リリースビルドでは「マルチスレッドデバッグ」として設定する必要がありますデバッグビルド。

Gtestライブラリは同じ方法で構築されるため、正しいバージョンのitにリンクしていることを確認する必要があります。そうしないと、リンカーがプルしますあなたが見たエラーであるランタイムライブラリの別のコピー(ところで、これはMFCを使用しているかどうかに違いはありません) gtestをデバッグとリリースの両方モードとしてビルドし、両方のコピーを保持する必要があります。次に、リリースビルドのgtest.lib/gtest_main.libおよびデバッグビルドのgtestd.lib/gtest_maind.libにリンクします。

また、アプリケーションがgtestヘッダーファイルが保存されているディレクトリ(プロパティ-> C/C++->全般->追加インクルードディレクトリ)を指していることを確認する必要がありますが、リンカーエラーが発生した場合は、すでにこの部分を正しく取得できていないか、最初に対処する必要があるコンパイラエラーがはるかに多いことを確認してください。

43
Nik Reiman

(これらの手順により、デバッグ構成でテストフレームワークが機能します。リリース構成に同じプロセスを適用するのは非常に簡単です。)

Google C++ Testing Frameworkを入手してください

  1. 最新の gtest framework をダウンロードします
  2. _C:\gtest_に解凍します

フレームワークライブラリを構築する

  1. Visual Studioで_C:\gtest\msvc\gtest.sln_を開きます
  2. 設定を「デバッグ」に設定します
  3. ビルドソリューション

テストプロジェクトの作成と設定

  1. 新しいソリューションを作成し、テンプレートVisual C++> Win32> Win32 Console Applicationを選択します
  2. 新しく作成したプロジェクトを右クリックし、[プロパティ]を選択します
  3. 構成をデバッグに変更します。
  4. 構成プロパティ> C/C++>全般>追加インクルードディレクトリ:_C:\gtest\include_を追加
  5. [構成プロパティ]> [C/C++]> [コード生成]> [ランタイムライブラリ]:コードがランタイムDLLにリンクしている場合は、[マルチスレッドデバッグDLL(/ MDd)]を選択します。 (/ MTd)。
  6. [構成プロパティ]> [リンカー]> [全般]> [追加のライブラリディレクトリ]:gtestd.libの場所に応じて、_C:\gtest\msvc\gtest\Debug_または_C:\gtest\msvc\gtest-md\Debug_を追加します
  7. 構成プロパティ>リンカ>入力>追加の依存関係:_gtestd.lib_を追加

すべての動作を検証する

  1. main()関数を含むテストプロジェクトでcppを開きます。
  2. 次のコードを貼り付けます。

    _#include "stdafx.h"  
    #include <iostream>
    
    #include "gtest/gtest.h"
    
    TEST(sample_test_case, sample_test)
    {
        EXPECT_EQ(1, 1);
    }
    
    int main(int argc, char** argv) 
    { 
        testing::InitGoogleTest(&argc, argv); 
        RUN_ALL_TESTS(); 
        std::getchar(); // keep console window open until Return keystroke
    }
    _
  3. デバッグ>デバッグの開始

すべてがうまくいくと、コンソールウィンドウが表示され、単体テストの結果が表示されます。

102
mtlynch

セットアップに関するビデオチュートリアルを行いました: http://www.youtube.com/watch?v=mzSzwQOmMRs

6
Armando

テスト用に独自のmain()を作成したくない場合は、gtest_main.libで定義されたmain()関数を使用できますが、VS2012で「エントリポイントを定義する必要があります」というリンカーエラーが発生します。テストプロジェクトでProjectProperties-> Linker-> System-> SubSystemを「Console」に設定します。これにより、VS2012は「main()」というエントリポイントを検索し、gtest_main.libで検索します(リンクした場合)適切に)。

5
philipper

Gtestを構築したら、これが私がやったことです。

  1. \ mypath\gtest-1.0.1\Debug(またはRelease)をCommon Properties-> Linker-> General-> Additional Library Directoriesに追加します
  2. Gtest.libとgtest_main.libをCommon Properties-> Linker-> Input-> Additional Dependenciesに追加します

その後、必要に応じてTESTまたはTEST_Fを使用してテストを記述し、メイン関数と一緒にコンパイルします。

int main(int argc, char** argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}
4
Arlaharen

Microsoft Visual Studioでは、ランタイムライブラリタイプの設定が間違っていると、リンクエラーが発生します。

VS 2005(および2008)は、デフォルトとしてマルチスレッドDLLまたはマルチスレッドデバッグDLL=を使用します。ただし、GoogleテストライブラリはデフォルトとしてMulithreadedまたはMulithreadedデバッグランタイムを使用します。

そのため、Googleテストライブラリに適切なランタイムライブラリタイプを選択します。 ([構成プロパティ]-> [コード生成]-> [ランタイムライブラリ])。

2
rein

多くのエラー、修正に時間がかかりました。

簡単な手順を次に示します。

#次からGoogletest Zipファイルをダウンロード: https://github.com/google/googletest

#Googletest Visual Studioソリューション

Open    C:\googletest\googletest\msvc\2010\gtest.sln
    Change "Solution configuration"
        from "Debug" to "Release"
    Build Solution
        creates gtest.lib

#プロジェクト:

Project Properties > Configuration Properties > VC++ Directories > Include Directories
    append the following:       ;C:\googletest\googletest\include

Project Properties > Configuration Properties > Linker > General > Additional Library Directories > 
    append the following:           ;C:\googletest\googletest\msvc\2010\gtest\Win32-Release

Project Properties > Configuration Properties > C/C++ > Runtime Library
    Remove the value of the above. (or match it to Googletest project)