Visual Studio 2019测试资源管理器未找到c++ google测试

7d7tgy0s  于 2022-11-19  发布在  Go
关注(0)|答案(3)|浏览(272)

我希望在VS 2019测试资源管理器中显示用google test编写的c++单元测试。
测试已正确设置并且可以执行。结果显示在VS调试控制台/类似命令行的窗口中。除了测试相关消息外,没有显示任何错误消息。我希望从测试资源管理器启动测试,并希望创建测试播放列表。
我安装了VS安装程序提供的Google测试适配器。我遵循了X1 E0 F1 X的指导方针和建议的故障排除。
有没有其他方法可以让google测试在测试浏览器中显示?google测试和VS测试浏览器还有什么不兼容的地方?

tjjdgumg

tjjdgumg1#

我遇到了和你一样的问题。我有一个主 CMakeLists.txt,和另外两个 CMakeLists.txt 文件在子目录中:一个用于我正在测试的静态库,一个用于测试项目本身。为了确保测试出现在测试资源管理器中,我不得不将enable_testing()从test子目录移动到主 * CMakeLists.txt * 中。

option(MY_PROJECT_TESTS "Build unit tests" ON)

if(MY_PROJECT_TESTS)
    enable_testing()
    add_subdirectory("test")
endif()

然后在test子目录中,我设置GoogleTest环境,并通过以下方式添加test:

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;")
...
bf1o4zei

bf1o4zei2#

对于我来说,使用nuget从www.example.com升级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”
恢复到以前的版本对我来说是有效的。(测试资源管理器现在回来了)我认为只要确保使用静态版本而不是动态版本就可以了。

0wi1tuuw

0wi1tuuw3#

有多个扩展,似乎他们应该使用。如果你遵循https://learn.microsoft.com/en-us/visualstudio/test/how-to-use-google-test-for-cpp?view=vs-2022的建议,你使用TestAdapterForGoogleTest从微软?()有另一个从谷歌。(谷歌测试适配器)。我有一个项目,使用旧版本的gtest。我安装了这个扩展,事情停止工作。卸载它,并重新启动。重建和事情似乎再次工作。

相关问题