2016-10-26 15 views
0

私のプロジェクトでCtestとgoogletestを統合しようとしています。 https://crascit.com/2015/07/25/cmake-gtest/に記載されているように私のプロジェクトにgoogletestを含めました。googletestの初期化時にCmake/Ctestテストが失敗する

CoreTest.cppとCMakeLists.txtで新しいテストフォルダを作成しました。 CMakeListsが含まれています:

ADD_EXECUTABLE(CoreTest CoreTest.cpp) 
TARGET_LINK_LIBRARIES(CoreTest corelib gtest gmock) 
ADD_TEST(NAME CoreTest COMMAND CoreTest) 

CoreTest.cppが含まれています

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

これが失敗した:私はInitGoogleTestの行をコメント場合

1>------ Rebuild All started: Project: RUN_TESTS, Configuration: Debug x64 ------ 
1> Test project 
1>  Start 1: CoreTest 
1> 1/1 Test #1: CoreTest .....................***Failed 1.52 sec 
1> 
1> 0% tests passed, 1 tests failed out of 1 

しかし、テストは成功します。

ここで何が問題になるのでしょうか?

多くの感謝!

ありがとうございましたaxalis!私はコマンドラインから走ろうとしましたが、グーグレストのDLLが私のパスにないことがわかりました。これが問題でした。

私は複数のテストを追加しましたが、私はMSVCでcTESTを出力を見ることができます:

1>------ Rebuild All started: Project: RUN_TESTS, Configuration: Debug x64 ------ 
1> Test project 
1>  Start 1: CoreTest 
1> 1/1 Test #1: CoreTest ..................... Passed 0.03 sec 
1> 
1> 100% tests passed, 0 tests failed out of 1 

は、私は、コンソールから何を得るのようなgoogletest出力を見るためにそこの方法です:?

>CoreTest.exe 
[==========] Running 2 tests from 1 test case. 
[----------] Global test environment set-up. 
[----------] 2 tests from MathTest 
[ RUN  ] MathTest.TwoPlusTwoEqualsFour 
[  OK ] MathTest.TwoPlusTwoEqualsFour (0 ms) 
[ RUN  ] MathTest.TwoPlusFourEqualsSix 
[  OK ] MathTest.TwoPlusFourEqualsSix (0 ms) 
[----------] 2 tests from MathTest (1 ms total) 

[----------] Global test environment tear-down 
[==========] 2 tests from 1 test case ran. (4 ms total) 
[ PASSED ] 2 tests. 
+1

コマンドラインから直接 'CoreTest'コマンドを実行すると、どのような出力が得られますか? (セグメンテーションやテストが失敗する他の手がかりがあるかもしれません - CMakeテストの実行は失敗/成功の状態のみを表示し、実際のエラーは表示しません)、または通常 "Testing"フォルダ内のレポートを見つけることができます) – axalis

+0

特に実際のテストが実行されていなければBoostテストは失敗し、InitGoogleTestが追加される前に、実行されていない可能性があります。されていませんでした。したがって、実行するコードに少なくとも1つのテストがあることを確認してください。 – axalis

+0

@Guillaume最初のコメント: 'RUN_TESTS'ターゲットはCMakeによって生成され、' RUN_TESTS'を通してctestコマンドを実行する際に使用されるオプションを制御する方法があるかどうかはわかりません。コマンドラインで 'ctest'を実行すると、-Vを加えてすべての出力を得ることができます。今私の質問:私はあなたと同じ元の問題があります。どのように修正しましたか? gtest DLLパスをCTestに渡しましたか?例えば、CMake変数を通して?'RUN_TESTS'を動作させる唯一の方法は、gtest DLLをすべてのアプリケーションのDLLが存在するインストールディレクトリにコピーした場合です。応答ありがとう – NameRakes

答えて

1

GoogleTestモジュールには、テスト実行ファイル内で定義された個々のテストの結果を表示するために使用できる2つの機能があります。 gtest_add_tests()は、設定時にソースファイルをスキャンする伝統的な方法です。gtest_discover_tests()(CMake 3.10から利用可能)は、CTestが実行され、より堅牢になるまでテストのセットを遅らせる(例えば、タイプ - または値パラメータ化されたテスト)。

CMake 3.8以前を使用している場合、関数はGoogleTestではなくFindGTestで提供されます。古いCMakeのバージョンとの互換性が必要な場合は、GoogleTestモジュールを取り込むため、FindGTestを使用してください。 CMake 3.9以降が必要な場合は、GoogleTestを直接使用してください。なぜなら、実際にgtestをビルドに直接組み込んでいるからです。 3.9以降では、テストは次のように定義できます。

include(GoogleTest) 
gtest_discover_tests(CoreTest) 
関連する問題