我正试图在我的项目中整合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)