Ошибка теста Cmake / Ctest при инициализации googletest

Я пытаюсь интегрировать Ctest и googletest в свой проект. Я включил googletest в свой проект, как описано в https://crascit.com/2015/07/25/cmake-gtest/.

Я создал новую тестовую папку с CoreTest.cpp и CMakeLists.txt. CMakeLists содержит:

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 не попали на мой путь, что было проблемой.

Я добавил несколько тестов, но в 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.

person Guillaume    schedule 26.10.2016    source источник
comment
Что получится, если вы запустите команду CoreTest прямо из командной строки? (может быть segfault или другие подсказки, почему тест не проходит - тестовый запуск CMake показывает только состояние сбоя / успеха, но не фактические ошибки ... или вы обычно можете найти отчеты в папке Testing)   -  person axalis    schedule 26.10.2016
comment
В частности, я не совсем уверен насчет GTest сейчас, но, например, тесты Boost не работают, если нет реальных тестов для запуска - и до добавления InitGoogleTest исполняемый файл мог быть успешным, потому что без него проверка отсутствия теста для запуска не было сделано. Итак, убедитесь, что у вас есть хотя бы один тест в коде, который нужно запустить.   -  person axalis    schedule 26.10.2016
comment
@Guillaume сначала комментарий: RUN_TESTS target генерируется CMake и не знает, есть ли способ контролировать параметры, используемые при выполнении команды ctest через RUN_TESTS. Когда вы запускаете ctest в командной строке, вы можете добавить -V, чтобы получить весь вывод. Теперь мой вопрос: у меня такая же изначальная проблема, как и у вас. Как ты это починил? Вы передали CTest путь gtest DLL, скажем, через переменную CMake? Единственный способ заставить RUN_TESTS работать - это скопировать библиотеки DLL gtest в каталог установки, где находятся все библиотеки DLL моего приложения. Спасибо за ответ   -  person NameRakes    schedule 11.01.2017
comment
Я добавил пути gtest dll к моей переменной среды PATH. Затем я использовал ADD_CUSTOM_COMMAND для выполнения тестов во время сборки. Надеюсь это поможет!   -  person Guillaume    schedule 12.01.2017


Ответы (1)


Модуль GoogleTest предоставляет две функции, которые можно использовать для отображения результата. каждого отдельного теста, определенного в вашем исполняемом файле теста. gtest_add_tests() - это традиционный метод, который сканирует исходный файл (ы) во время настройки, в то время как gtest_discover_tests() (доступный в CMake 3.10) откладывает разработку набора тестов до запуска CTest и является более надежным (например, у него нет проблем с такими вещами, как type - или параметризованные по значению тесты).

При использовании CMake 3.8 или более ранней версии функция gtest_add_tests() предоставляется FindGTest, а не GoogleTest. Если вам нужна совместимость со старыми версиями CMake, используйте FindGTest, потому что он в любом случае использует модуль GoogleTest. Если вам может потребоваться CMake 3.9 или новее, используйте GoogleTest напрямую, потому что вы на самом деле не хотите пытаться найти gtest, поскольку вы включаете его непосредственно в свою сборку. Начиная с версии 3.10, ваш тест может быть определен следующим образом:

include(GoogleTest)
gtest_discover_tests(CoreTest)
person Craig Scott    schedule 06.12.2017
comment
Я смог заставить это работать только после удаления вызовов include(GTest), include (CTest) `и enable_testing в файл cmake верхнего уровня. - person CiaranWelsh; 24.01.2021