2016-06-14 2 views
0

Теперь я настраиваю среду тестирования C++ с помощью CMake. На самом деле я понял, что хочу, но меня смущает 2 разных стиля выходных тестов. В моем примере ниже, что делать «делать тест» на самом деле? Я думаю, что результат «сделать тест» и «./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 

корень /CMakeLists.txt

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) 

тест/тест/куб.см

#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

CMake/CTest будет перенаправлять вывод тестового исполняемого файла в лог-файл. Проверьте «Тестирование/Временный/LastTest.log». То, что вы видите с помощью 'make test', это вывод ** CTest **, который показывает только конечный результат. – DevSolar

ответ

2

Вы можете изменить поведение CTest (что и сделает тест в конечном итоге) с переменными окружения.

Например:

CTEST_OUTPUT_ON_FAILURE=1 make test 

Это напечатает полный выход для тестирования исполняемых файлов, которые имели неудачу.

Еще один вы можете быть заинтересованы в это CTEST_PARALLEL_LEVEL

+0

Благодарим вас за полезный комментарий. Я также могу подтвердить это «ctest --output-on-failure». Но я обнаружил, что ошибок нет, стиль вывода отличается от googltest. В любом случае я мог прояснить свою мысль. – jef

+0

@jef, если код возврата тестового исполняемого файла равен 0, ctest потребляет весь вывод, чтобы вы его не видели. Если вы хотите увидеть весь вывод, попробуйте 'ctest --verbose' –

Смежные вопросы