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



我正试图在我的项目中整合Ctest和googletest。如https://crascit.com/2015/07/25/cmake-gtest/所述,我在我的项目中包含了googletest。

我用CoreTest.cpp和CMakeLists.txt创建了一个新的测试文件夹。cmakelist包含:

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.

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

默认情况下,gtest_discover_tests()将在构建时使用目标上的POST_BUILD步骤查询测试可执行文件。使用CMake 3.18或更高版本,您可以要求它在测试时查询测试可执行文件。DISCOVERY_MODE选项控制何时执行查询。POST_BUILD对应默认行为,而PRE_TEST将查询延迟到测试时间。您可以使用CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE变量更改全局默认行为,而不是在每个测试上设置该选项,该变量接受与DISCOVERY_MODE选项相同的值。如果是交叉编译,那么应该使用PRE_TEST模式,因为您知道测试可执行文件在测试时必须是可运行的(即必须已经设置了模拟器),但在构建时并非如此。

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

include(GoogleTest)
gtest_discover_tests(CoreTest)

相关内容

  • 没有找到相关文章

最新更新