Как настроить Google c++ Testing Framework (gtest) в Visual Studio 2005


Это не задокументировано на веб-сайте, и люди, похоже, испытывают проблемы с настройкой фреймворка. Может кто-то, пожалуйста, показать шаг за шагом введение в пример настройки проекта.

7 72

7 ответов:

то, что сказал Арлахарен, было в основном правильно, за исключением того, что он пропустил часть, которая объясняет ваши ошибки компоновщика. Прежде всего, вам нужно построить свое приложение без CRT как библиотека времени выполнения. Вы всегда должны делать это в любом случае, так как это действительно упрощает распространение вашего приложения. Если вы этого не сделаете, то все ваши пользователи должны установить библиотеку времени выполнения Visual C++, а те, кто этого не сделает, будут жаловаться на отсутствие таинственной DLL в своей системе... для дополнительные несколько сотен килобайт, которые стоит связать в CRT статически, вы сэкономите себе много головной боли позже в поддержке (поверьте мне на этом-я узнал это на собственном горьком опыте!).

в любом случае, чтобы сделать это, вы переходите к свойствам цели -> C/C++ -> генерация кода -> библиотека времени выполнения, и она должна быть установлена как "многопоточная" для вашей сборки выпуска и "многопоточная отладка" для вашей сборки отладки.

поскольку библиотека gtest построена таким же образом, вы должны убедитесь, что вы связываетесь с правильной версией это, или же компоновщик вытащит другую копию библиотеки времени выполнения, которая является ошибкой, которую вы видели (кстати, это не должно иметь значения, используете ли вы MFC или нет). Вам нужно построить gtest как обоих Debug и Release режим и сохранить обе копии. Затем вы связываетесь с gtest.lib / gtest_main.lib в Вашей версии сборки и gtestd.lib / gtest_maind.lib в отладочной сборке.

кроме того, нужно убедитесь, что ваше приложение указывает на каталог, в котором хранятся файлы заголовков gtest (в properties -> C/C++ -> General -> Additional Include Directories), но если вы попали в ошибку компоновщика, я предполагаю, что вам уже удалось исправить эту часть, иначе у вас было бы намного больше ошибок компилятора, чтобы справиться с ними в первую очередь.

(эти инструкции заставляют платформу тестирования работать для конфигурации отладки. Это должно быть довольно тривиально, чтобы применить тот же процесс к конфигурации выпуска.)

Получить Google C++ Testing Framework

  1. скачать последнюю gtest framework
  2. распакуйте в C:\gtest

создайте библиотеки фреймворков

  1. открыть C:\gtest\msvc\gtest.sln в Visual Студия
  2. установите конфигурацию в "Debug"
  3. Построить Решение

создание и настройка тестового проекта

  1. создайте новое решение и выберите шаблон Visual C++ > Win32 > консольное приложение Win32
  2. щелкните правой кнопкой мыши вновь созданный проект и выберите Свойства
  3. изменить конфигурацию для отладки.
  4. Свойства Конфигурации > C/C++ > Общие > Дополнительные Включить Каталоги: Добавить C:\gtest\include
  5. свойства конфигурации > C / C++ > генерация кода > библиотека времени выполнения: если ваш код ссылается на DLL времени выполнения, выберите многопоточная библиотека отладки (/MDd). Если нет, выберите многопоточная отладка (/MTd).
  6. Свойства Конфигурации > Компоновщик > Общие - > Дополнительные Каталоги Библиотек: Добавить C:\gtest\msvc\gtest\Debug или C:\gtest\msvc\gtest-md\Debug, в зависимости от местоположения gtestd.Либ
  7. Свойства Конфигурации > Компоновщик > Вход > Дополнительные Зависимости: Добавить gtestd.lib

Проверка Все Работает

  1. откройте cpp в тестовом проекте, содержащем

Я сделал видео урок о настройке: http://www.youtube.com/watch?v=mzSzwQOmMRs

Если вы не хотите писать свой собственный main() для тестов, вы можете использовать функцию main (), определенную в gtest_main.lib но затем вы получаете ошибки компоновщика "точка входа должна быть определена" в VS2012. В вашем тестовом проекте установите ProjectProperties - >Linker->System - > SubSystem на "консоль", так как это заставит VS2012 искать точку входа под названием "main()" и найдет ее в gtest_main.lib (при условии, что вы связали его правильно).

построив gtest, это то, что я сделал:

  1. добавить \mypath\gtest-1.0.1\Debug (или Release) в общие свойства->Компоновщик->общие->дополнительные каталоги библиотек
  2. добавить gtest.lib и gtest_main.lib для общих свойств - > Компоновщик - > вход - >дополнительные зависимости

после этого я просто пишу свои тесты с помощью TEST или TEST_F по мере необходимости и компилирую их вместе с моей основной функцией:

int main(int argc, char** argv)
{
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

в Microsoft Visual Studio неверно настроенный тип библиотеки времени выполнения вызывает ошибки связи.

против 2005 года(и 2008), использует многопоточную DLL или многопоточная DLL с возможностью отладки по умолчанию. Но тестовая библиотека Google использует mulithreaded или Mulithreaded debug runtime по умолчанию.

Итак, выберите подходящий тип библиотеки времени выполнения для тестовой библиотеки google. (в свойствах конфигурации - > генерация кода - > библиотека времени выполнения).

много ошибок, потребовалось время, чтобы исправить.

вот простые шаги:

# Загрузите ZIP-файл Googletest из:https://github.com/google/googletest

# Googletest visual studio solution

Open    C:\googletest\googletest\msvc10\gtest.sln
    Change "Solution configuration"
        from "Debug" to "Release"
    Build Solution
        creates gtest.lib

# Ваш проект:

Project Properties > Configuration Properties > VC++ Directories > Include Directories
    append the following:       ;C:\googletest\googletest\include

Project Properties > Configuration Properties > Linker > General > Additional Library Directories > 
    append the following:           ;C:\googletest\googletest\msvc10\gtest\Win32-Release

Project Properties > Configuration Properties > C/C++ > Runtime Library
    Remove the value of the above. (or match it to Googletest project)