Обозреватель тестов Visual Studio 2019 не нашел тесты c Google

#c #visual-studio-2019 #googletest

#c #visual-studio-2019 #googletest

Вопрос:

Я хочу, чтобы модульный тест c , написанный в Google test, отображался в обозревателе тестов VS 2019.

Тесты настроены правильно и могут быть выполнены. Результаты отображаются в окне VS debug console / командной строки. Никаких сообщений об ошибках, кроме сообщений, зависящих от теста, не отображается. Я хочу запустить тесты из проводника тестов и хочу создать списки воспроизведения тестов.

Я установил адаптер тестирования Google, предоставленный установщиком VS. Я следовал рекомендациям и предлагаемым методам устранения неполадок в TestAdapterForGoogleTest.

Существует ли другой способ, чтобы отправить тест Google в обозреватель тестов? Каковы другие известные несовместимости с Google test и VS test Explorer?

Комментарии:

1. Я совсем не уверен, так как никогда раньше не использовал Google test. Это работает, когда я использую консоль, но я должен выяснить, что я упускаю из виду. Я думаю, что Google test не виноват. Я не смог найти полезную информацию о поддержке test Explorer для Google test.

2. Используете ли вы функцию GTest по умолчанию main() или реализуете свою собственную main() функцию?

3. Я использую: int main(int argc, char** argv){ testing::InitGoogleTest(amp;argc, argv); RUN_ALL_TESTS(); }

Ответ №1:

У меня была та же проблема, что и у вас. У меня основной CMakeLists.txt , и еще два CMakeLists.txt файлы в подкаталогах: один для статической библиотеки, которую я тестирую, и один для самого тестового проекта. Чтобы убедиться, что тесты отображаются в Test Explorer, мне пришлось перейти enable_testing() из подкаталога test в main 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;")
...
  

Ответ №2:

для меня обновление с 1.8.1.3 до 1.8.1.4 с использованием nuget сломало мой проект. Он переключил Microsoft.googletest.v140.windesktop.msvcstl.static.rt-dyn.1.8.1.3 на Microsoft.googletest.v140.windesktop.msvcstl.dyn.rt-dyn.1.8.1.3buildnativeMicrosoft.googletest.v140.windesktop.msvcstl.dyn.rt-dyn.targets»

возврат к предыдущему сработал для меня. (Теперь test Explorer вернулся) Я думаю, что просто убедитесь, что вы используете статическую версию, а не динамическую, также должно работать.

Ответ №3:

Существует несколько расширений, которые, похоже, следует использовать. Если вы последуете совету https://learn.microsoft.com/en-us/visualstudio/test/how-to-use-google-test-for-cpp?view=vs-2022 вы используете TestAdapterForGoogleTest от Microsoft ? () Есть еще один от Google. (Google test adapter). У меня есть проект, в котором использовались старые версии gtest. Я установил это расширение, и все перестало работать. удалите его и перезапустите. перестройте, и все, казалось, снова заработало.