Нещодавно мене продали на використанні CMake для складання моїх проектів на C ++, і зараз я хотів би почати писати деякі тести для свого коду. Я вирішив скористатись утилітою Google Test, щоб допомогти у цьому, але потребую деякої допомоги в роботі.
Цілий день я читав різні посібники та приклади, зокрема « Буквар» , вступ в IBM та деякі питання щодо SO ( тут і тут ), а також інші джерела, про які я втратив свої знання. Я розумію, що там багато, але я все-таки відчуваю труднощі.
На даний момент я намагаюся реалізувати найосновніший тест, щоб підтвердити, що я склав / встановив правильний gtest і він не працює. Єдиний вихідний файл (testgtest.cpp) взято майже точно з цієї попередньої відповіді:
#include <iostream>
#include "gtest/gtest.h"
TEST(sample_test_case, sample_test)
{
EXPECT_EQ(1, 1);
}
і моє асоційоване CMakeLists.txt таке:
cmake_minimum_required(VERSION 2.6)
project(basic_test)
# Setup testing
enable_testing()
find_package(GTest REQUIRED)
include_directories(${GTEST_INCLUDE_DIR})
# Add test cpp file
add_executable(runUnitTests
testgtest.cpp
)
# Link test executable against gtest & gtest_main
target_link_libraries(runUnitTests ${GTEST_LIBRARY_DEBUG} ${GTEST_MAIN_LIBRARY_DEBUG})
add_test(
NAME runUnitTests
COMMAND runUnitTests
)
Зауважте, що я вирішив зв’язатись з gtest_main замість надання основного в кінці файлу cpp, оскільки я вважаю, що це дозволить мені легше масштабувати тестування на декілька файлів.
Під час створення сформованого файлу .sln (у Visual C ++ 2010 Express) я, на жаль, отримую довгий список помилок форми
2>msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: virtual __thiscall std::basic_iostream<char,struct std::char_traits<char> >::~basic_iostream<char,struct std::char_traits<char> >(void)" (??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ) already defined in gtestd.lib(gtest-all.obj)
що, на мою думку, означає, що я не вдається успішно зв’язатися з найшвидшими бібліотеками. Я переконався, що при підключенні до бібліотек налагодження я намагався будувати в режимі налагодження.
EDIT
Зробивши ще кілька копань, я думаю, що моя проблема пов'язана з типом бібліотеки, в яку я будую. Під час створення gtest з CMake, якщо BUILD_SHARED_LIBS
це не встановлено, я пов’язую свою програму з цими .lib-файлами, я отримую вказані вище помилки. Однак якщо BUILD_SHARED_LIBS
це встановлено, я створюю набір файлів .lib та .dll. Під час посилання на ці файли .lib програма компілює, але при запуску скаржиться, що не може знайти gtest.dll.
У чому полягають відмінності між бібліотекою " a" SHARED
та " SHARED
non", і якщо я вибираю не спільний, чому це не працює? Чи є в моєму проекті CMakeLists.txt варіант, який мені не вистачає?
enable_testing()
?
ExternalProject_Add
а неadd_subdirectory
. Детальніше див. У цій відповіді .