初始化googletest时Cmake / Ctest测试失败

时间:2016-10-26 16:37:26

标签: c++ cmake googletest ctest

我正在尝试在我的项目中集成Ctest和googletest。我按照https://crascit.com/2015/07/25/cmake-gtest/中的说明在我的项目中添加了googletest。

我使用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;
}

这失败了:

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

但是,如果我对InitGoogleTest行发表评论,那么测试会成功。

关于这里可能出现什么问题的任何想法?

非常感谢!

谢谢axalis!我试图从命令行运行并意识到googletest 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 个答案:

答案 0 :(得分:1)

GoogleTest模块提供了两个函数,可用于显示测试可执行文件中定义的每个单独测试的结果。 gtest_add_tests()是在配置时扫描源文件的传统方法,而gtest_discover_tests()(可从CMake 3.10获得)延迟计算测试集,直到CTest运行并且更稳健(例如它对类型或值参数化测试没有问题。

如果使用CMake 3.8或更早版本,则gtest_add_tests()功能由FindGTest而不是GoogleTest提供。如果您需要与较旧的CMake版本兼容,请使用FindGTest,因为它无论如何都会引入GoogleTest模块。如果您可以要求使用CMake 3.9或更高版本,请直接使用GoogleTest因为您实际上并不想尝试找到gtest,因为您将其直接合并到构建中。使用3.10或更高版本,您的测试可以这样定义:

include(GoogleTest)
gtest_discover_tests(CoreTest)