2016-06-14 24 views
0

今私はCMakeでC++テスト環境を設定しています。実際に私は何をしたいのか分かりましたが、私は2つの異なるテスト出力スタイルで混乱しています。 私の例では、実際に 'make test'とは何ですか?私は 'make test'と './test/Test'の両方の出力が同じではあるが正確ではないと思う。 'make test'の出力はgoogletestの出力スタイルとは異なります。テスト結果は同じですが、私はこれらの出力に満足できませんでした。なぜ「make test」と「./test/Test」

出力差

$ make test     
Running tests... 
Test project /path/to/sample/build 
    Start 1: MyTest 
1/1 Test #1: MyTest ...........................***Failed 0.02 sec 

0% tests passed, 1 tests failed out of 1 

Total Test time (real) = 0.02 sec 

The following tests FAILED: 
      1 - MyTest (Failed) 
Errors while running CTest 
make: *** [test] エラー 8 

$ ./test/Test    
Running main() from gtest_main.cc 
[==========] Running 2 tests from 1 test case. 
[----------] Global test environment set-up. 
[----------] 2 tests from MyLibTest 
[ RUN  ] MyLibTest.valCheck 
/path/to/test/test.cc:10: Failure 
     Expected: sqr(1.0) 
     Which is: 1 
To be equal to: 2.0 
     Which is: 2 
[ FAILED ] MyLibTest.valCheck (0 ms) 
[ RUN  ] MyLibTest.negativeValCheck 
[  OK ] MyLibTest.negativeValCheck (0 ms) 
[----------] 2 tests from MyLibTest (0 ms total) 

[----------] Global test environment tear-down 
[==========] 2 tests from 1 test case ran. (0 ms total) 
[ PASSED ] 1 test. 
[ FAILED ] 1 test, listed below: 
[ FAILED ] MyLibTest.valCheck 

1 FAILED TEST 

コマンド

mkdir build 
cd build 
cmake .. 
make test // NOT googletest output style 
./test/Test // It looks googletest output 

私の環境

root 
- CMakeLists.txt 
+ src/ 
    - CMakeLists.txt 
    - main.cc 
    - sqr.cc 
    - sqr.h 
+ test/ 
    - CMakeLists.txt 
    - test.cc 

ルートは、あなたが(cTEST収録の動作を変更することができます

cmake_minimum_required(VERSION 2.8) 
project (MYTEST) 

add_subdirectory(src) 
add_subdirectory(test) 
enable_testing() 
add_test(NAME MyTest COMMAND Test) 

テスト/ CMakeLists.txt

cmake_minimum_required(VERSION 2.8) 
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}) 
set(GTEST_ROOT /path/to/googletest/googletest) 
include_directories(${GTEST_ROOT}/include/) 
link_directories(${GTEST_ROOT}/build/) 
add_executable(Test ${CMAKE_CURRENT_SOURCE_DIR}/test.cc) 
target_link_libraries(Test sqr gtest gtest_main pthread) 

テスト/テスト/ ccの

#include "../src/sqr.h" 
#include <gtest/gtest.h> 

namespace { 
    class MyLibTest : public ::testing::Test{}; 

    TEST_F(MyLibTest, valCheck) { 
    EXPECT_EQ(sqr(3.0), 9.0); 
    EXPECT_EQ(sqr(1.0), 2.0); // it fails! 
    } 

    TEST_F(MyLibTest, negativeValCheck) { 
    EXPECT_EQ(sqr(-3.0), 9.0); 
    } 
} 
+0

です。 'Testing/Temporary/LastTest.log'をチェックしてください。 'make test 'で見られるのは、** CTest **の出力です。これは最終結果のみを表示します。 – DevSolar

答えて

2

を/CMakeLists.txt makeテストが最終的に実行されるものです)を環境変数で置き換えます。例えば

CTEST_OUTPUT_ON_FAILURE=1 make test 

これは、障害を持っていたテストの実行のための完全な出力を表示します。あなたが興味がある可能性があり

もう一つはcmakeの/ CTESTは、ログファイルにテストの実行ファイルの出力をリダイレクトしますCTEST_PARALLEL_LEVEL

+0

あなたの役に立つコメントありがとうございます。私は 'ctest --output-on-failure'によってこれを確認することもできます。しかし、エラーがなければ、出力スタイルはgoogltestとは異なることがわかりました。とにかく私は自分の考えをクリアすることができました。 – jef

+0

@jefテスト実行ファイルのリターンコードが0の場合、ctestはすべての出力を消費しますので、表示されません。すべての出力を見たい場合は、 'ctest --verbose'を試してみてください。 –

関連する問題