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

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

7 ответов

Решение

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

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

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

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

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

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

  1. Загрузите последнюю платформу gtest
  2. Распаковать в C:\gtest

Сборка рамочных библиотек

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

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

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

Проверка, что все работает

  1. Откройте CPP в вашем тестовом проекте, содержащем main() функция.
  2. Вставьте следующий код:

    #include "stdafx.h"  
    #include <iostream>
    
    #include "gtest/gtest.h"
    
    TEST(sample_test_case, sample_test)
    {
        EXPECT_EQ(1, 1);
    }
    
    int main(int argc, char** argv) 
    { 
        testing::InitGoogleTest(&argc, argv); 
        RUN_ALL_TESTS(); 
        std::getchar(); // keep console window open until Return keystroke
    }
    
  3. Отладка> Начать отладку

Если все работает, вы должны увидеть окно консоли и показать вам результаты модульного теста.

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

Собрав gtest, я сделал следующее:

  1. Добавьте \mypath\gtest-1.0.1\Debug (или Release) в Общие свойства->Linker->General-> Дополнительные каталоги библиотеки
  2. Добавьте gtest.lib и gtest_main.lib в Общие свойства-> Линкер-> Ввод-> Дополнительные зависимости

После этого я просто пишу свои тесты, используя TEST или TEST_F, в зависимости от ситуации, и компилирую их вместе с моей основной функцией:

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

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

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

VS 2005 (и 2008) по умолчанию использует многопоточную DLL или многопоточную отладочную DLL. Но в Google Test по умолчанию используется многопоточная или многопоточная среда отладки.

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

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

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

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

# Googletest Visual Studio Solution

Open    C:\googletest\googletest\msvc\2010\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\msvc\2010\gtest\Win32-Release

Project Properties > Configuration Properties > C/C++ > Runtime Library
    Remove the value of the above. (or match it to Googletest project)
Другие вопросы по тегам