#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. Я установил это расширение, и все перестало работать. удалите его и перезапустите. перестройте, и все, казалось, снова заработало.