【问题标题】:Why 'make test' and "./test/Test"为什么“进行测试”和“./test/Test”
【发布时间】:2016-06-14 08:37:12
【问题描述】:

现在我正在使用 CMake 设置一个 c++ 测试环境。实际上我已经意识到我想要做什么,但是我对 2 种不同的测试输出风格感到困惑。 在下面的示例中,“make test”实际上是做什么的?我认为'make test'和'./test/Test'的输出是一样的,但不完全一样。 'make test' 输出与 googletest 输出风格不同。虽然测试结果看起来一样,但我对这些输出并不满意。

输出差异

$ 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

root /CMakeLists.txt

 cmake_minimum_required(VERSION 2.8)
 project (MYTEST)

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

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);
   }
 }

【问题讨论】:

  • CMake / CTest 会将测试可执行文件的输出重定向到日志文件。检查Testing/Temporary/LastTest.log。 make test 看到的是 CTest 输出,它只显示最终结果。

标签: c++ makefile cmake googletest


【解决方案1】:

您可以使用环境变量修改 ctest 的行为(这是 make test 最终将执行的)。

例如:

CTEST_OUTPUT_ON_FAILURE=1 make test

这将打印失败的测试可执行文件的完整输出。

您可能感兴趣的另一个是CTEST_PARALLEL_LEVEL

【讨论】:

  • 感谢您的有用评论。我也可以通过“ctest --output-on-failure”来确认这一点。但我发现如果没有错误,输出风格与 googltest 不同。反正我可以理清思路了。
  • @jef 如果测试可执行文件的返回码为 0,ctest 会消耗所有输出,因此您看不到它。如果您想查看所有输出,请尝试ctest --verbose
猜你喜欢
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-30
  • 2020-09-03
  • 2011-03-25
  • 2011-03-25
  • 2021-03-04
  • 2014-08-05
相关资源
最近更新 更多