Visual Studio 2019 测试资源管理器未找到 c++ google 测试
Visual Studio 2019 Test Explorer did not find c++ google tests
我希望在 VS 2019 测试资源管理器中显示 google 测试中编写的 c++ 单元测试。
测试设置正确,可以执行。结果显示在VS调试console/commandline-likewindow。除了测试相关消息之外,没有显示任何错误消息。
我想从测试资源管理器开始测试并创建测试播放列表。
我安装了 VS Installer 提供的 google 测试适配器。我遵循了 TestAdapterForGoogleTest.
中的指南和建议的故障排除
是否存在另一种方法可以让 google 测试显示在测试资源管理器中?
google 测试和 VS 测试资源管理器还有哪些其他已知的不兼容性?
我遇到了和你一样的问题。我在子目录中有一个主要的 CMakeLists.txt 和另外两个 CMakeLists.txt 文件:一个用于静态库我正在测试,其中一个用于测试项目本身。
为了确保测试出现在 Test Explorer 中,我不得不将 enable_testing()
从测试子目录移动到主 CMakeLists.txt.
option(MY_PROJECT_TESTS "Build unit tests" ON)
if(MY_PROJECT_TESTS)
enable_testing()
add_subdirectory("test")
endif()
然后在测试子目录中,我正在设置GoogleTest环境,并通过以下方式添加测试:
set(GTEST_DIR "googletest/googletest" CACHE PATH "gtest directory")
include(GoogleTest)
set(gtest_force_shared_crt OFF CACHE BOOL "" FORCE)
add_subdirectory("googletest")
project(My_project_test)
if (WIN32)
add_library(qtpcre STATIC IMPORTED)
set_target_properties(qtpcre PROPERTIES
IMPORTED_LOCATION_DEBUG ${QT5_DIR}/lib/qtpcre2d.lib
IMPORTED_LOCATION_RELEASE ${QT5_DIR}/lib/qtpcre2.lib
)
endif()
set(CommonTestLib
Qt5::Core
My_project
gtest_main
)
if (WIN32)
list(APPEND CommonTestLib
Ws2_32.lib
version.lib
Netapi32.lib
Userenv.lib
Crypt32.lib
Winmm.lib
qtpcre
)
endif()
add_executable (My_project_test test_main.cpp test_cases.cpp)
target_precompile_headers(My_project_test REUSE_FROM My_project)
target_link_libraries(My_project_test ${CommonTestLib})
gtest_add_tests(TARGET My_project_test EXTRA_ARGS --arg1 "${CMAKE_CURRENT_SOURCE_DIR}/data")
最后一行很重要。除了 gtest_add_tests
,您还可以使用 add_test
。它需要不同的参数,但当您的目标是在 VS2019 的测试资源管理器中显示测试用例时,它也适用。
上述解决方案有帮助的原因:
当您将 enable_testing()
添加到您的顶级 CMakeLists.txt 文件时,它会在您的文件中生成一个顶级 CTestTestfile.cmake 文件构建目录。测试资源管理器需要它来汇总构建过程中生成的所有测试用例。如果您的代码结构中有特定的 CMake 层次结构,您应该有一个类似的 CTest。
我的顶级CTestTestfile.cmake文件内容:
# CMake generated Testfile for
# Source directory: C:/Projects/myproject
# Build directory: C:/Projects/myproject/out/build/x86-Debug
#
# This file includes the relevant testing commands required for
# testing this directory and lists subdirectories to be tested as well.
subdirs("test")
下层CTestTestfile.cmake文件内容:
# CMake generated Testfile for
# Source directory: C:/Projects/MyProject/test
# Build directory: C:/Projects/MyProject/out/build/x86-Debug/test
#
# This file includes the relevant testing commands required for
# testing this directory and lists subdirectories to be tested as well.
add_test(Environment.TestCommandLineArgument "C:/Projects/MyProject/out/build/x86-Debug/test/MyProject_test.exe" "--gtest_filter=Environment.TestCommandLineArgument" "--arg1" "C:/Projects/MyProject/test/data/")
set_tests_properties(Environment.TestCommandLineArgument PROPERTIES _BACKTRACE_TRIPLES "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.19/Modules/GoogleTest.cmake;380;add_test;C:/Projects/MyProject/test/CMakeLists.txt;38;gtest_add_tests;C:/Projects/MyProject/test/CMakeLists.txt;0;")
add_test(MyProjectExampleCreatorDevice.TestCreateExampleImage "C:/Projects/MyProject/out/build/x86-Debug/test/MyProject_test.exe" "--gtest_filter=MyProjectExampleCreatorDevice.TestCreateExampleImage" "--arg1" "C:/Projects/MyProject/test/data/")
set_tests_properties(MyProjectExampleCreatorDevice.TestCreateExampleImage PROPERTIES _BACKTRACE_TRIPLES "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.19/Modules/GoogleTest.cmake;380;add_test;C:/Projects/MyProject/test/CMakeLists.txt;38;gtest_add_tests;C:/Projects/MyProject/test/CMakeLists.txt;0;")
...
对我来说,使用 nuget 从 1.8.1.3 升级到 1.8.1.4 破坏了我的项目。
它切换了
Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.1.8.1.3
到
Microsoft.googletest.v140.windesktop.msvcstl.dyn.rt-dyn.1.8.1.3\build\native\Microsoft.googletest.v140.windesktop.msvcstl.dyn.rt-dyn.targets"
恢复到之前为我工作的状态。 (测试资源管理器现在回来了)我认为只要确保你使用静态版本而不是动态版本也应该有效。
我希望在 VS 2019 测试资源管理器中显示 google 测试中编写的 c++ 单元测试。
测试设置正确,可以执行。结果显示在VS调试console/commandline-likewindow。除了测试相关消息之外,没有显示任何错误消息。 我想从测试资源管理器开始测试并创建测试播放列表。
我安装了 VS Installer 提供的 google 测试适配器。我遵循了 TestAdapterForGoogleTest.
中的指南和建议的故障排除是否存在另一种方法可以让 google 测试显示在测试资源管理器中? google 测试和 VS 测试资源管理器还有哪些其他已知的不兼容性?
我遇到了和你一样的问题。我在子目录中有一个主要的 CMakeLists.txt 和另外两个 CMakeLists.txt 文件:一个用于静态库我正在测试,其中一个用于测试项目本身。
为了确保测试出现在 Test Explorer 中,我不得不将 enable_testing()
从测试子目录移动到主 CMakeLists.txt.
option(MY_PROJECT_TESTS "Build unit tests" ON)
if(MY_PROJECT_TESTS)
enable_testing()
add_subdirectory("test")
endif()
然后在测试子目录中,我正在设置GoogleTest环境,并通过以下方式添加测试:
set(GTEST_DIR "googletest/googletest" CACHE PATH "gtest directory")
include(GoogleTest)
set(gtest_force_shared_crt OFF CACHE BOOL "" FORCE)
add_subdirectory("googletest")
project(My_project_test)
if (WIN32)
add_library(qtpcre STATIC IMPORTED)
set_target_properties(qtpcre PROPERTIES
IMPORTED_LOCATION_DEBUG ${QT5_DIR}/lib/qtpcre2d.lib
IMPORTED_LOCATION_RELEASE ${QT5_DIR}/lib/qtpcre2.lib
)
endif()
set(CommonTestLib
Qt5::Core
My_project
gtest_main
)
if (WIN32)
list(APPEND CommonTestLib
Ws2_32.lib
version.lib
Netapi32.lib
Userenv.lib
Crypt32.lib
Winmm.lib
qtpcre
)
endif()
add_executable (My_project_test test_main.cpp test_cases.cpp)
target_precompile_headers(My_project_test REUSE_FROM My_project)
target_link_libraries(My_project_test ${CommonTestLib})
gtest_add_tests(TARGET My_project_test EXTRA_ARGS --arg1 "${CMAKE_CURRENT_SOURCE_DIR}/data")
最后一行很重要。除了 gtest_add_tests
,您还可以使用 add_test
。它需要不同的参数,但当您的目标是在 VS2019 的测试资源管理器中显示测试用例时,它也适用。
上述解决方案有帮助的原因:
当您将 enable_testing()
添加到您的顶级 CMakeLists.txt 文件时,它会在您的文件中生成一个顶级 CTestTestfile.cmake 文件构建目录。测试资源管理器需要它来汇总构建过程中生成的所有测试用例。如果您的代码结构中有特定的 CMake 层次结构,您应该有一个类似的 CTest。
我的顶级CTestTestfile.cmake文件内容:
# CMake generated Testfile for
# Source directory: C:/Projects/myproject
# Build directory: C:/Projects/myproject/out/build/x86-Debug
#
# This file includes the relevant testing commands required for
# testing this directory and lists subdirectories to be tested as well.
subdirs("test")
下层CTestTestfile.cmake文件内容:
# CMake generated Testfile for
# Source directory: C:/Projects/MyProject/test
# Build directory: C:/Projects/MyProject/out/build/x86-Debug/test
#
# This file includes the relevant testing commands required for
# testing this directory and lists subdirectories to be tested as well.
add_test(Environment.TestCommandLineArgument "C:/Projects/MyProject/out/build/x86-Debug/test/MyProject_test.exe" "--gtest_filter=Environment.TestCommandLineArgument" "--arg1" "C:/Projects/MyProject/test/data/")
set_tests_properties(Environment.TestCommandLineArgument PROPERTIES _BACKTRACE_TRIPLES "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.19/Modules/GoogleTest.cmake;380;add_test;C:/Projects/MyProject/test/CMakeLists.txt;38;gtest_add_tests;C:/Projects/MyProject/test/CMakeLists.txt;0;")
add_test(MyProjectExampleCreatorDevice.TestCreateExampleImage "C:/Projects/MyProject/out/build/x86-Debug/test/MyProject_test.exe" "--gtest_filter=MyProjectExampleCreatorDevice.TestCreateExampleImage" "--arg1" "C:/Projects/MyProject/test/data/")
set_tests_properties(MyProjectExampleCreatorDevice.TestCreateExampleImage PROPERTIES _BACKTRACE_TRIPLES "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/share/cmake-3.19/Modules/GoogleTest.cmake;380;add_test;C:/Projects/MyProject/test/CMakeLists.txt;38;gtest_add_tests;C:/Projects/MyProject/test/CMakeLists.txt;0;")
...
对我来说,使用 nuget 从 1.8.1.3 升级到 1.8.1.4 破坏了我的项目。 它切换了 Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.1.8.1.3 到 Microsoft.googletest.v140.windesktop.msvcstl.dyn.rt-dyn.1.8.1.3\build\native\Microsoft.googletest.v140.windesktop.msvcstl.dyn.rt-dyn.targets"
恢复到之前为我工作的状态。 (测试资源管理器现在回来了)我认为只要确保你使用静态版本而不是动态版本也应该有效。