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

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

Ответ 1

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

В любом случае, для этого вы перейдете к целевым свойствам → C/С++ → Generation Code → Runtime Library, и его необходимо установить как "Multi-Threaded" для вашей сборки релиза и "Multi-Threaded Debug" для вашей сборки Debug.

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

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

Ответ 2

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

Получить платформу тестирования Google С++

  • Загрузите последнюю gtest framework
  • Разархивируйте C:\gtest

Создание библиотек Framework

  • Откройте C:\gtest\msvc\gtest.sln в Visual Studio
  • Задайте конфигурацию для "Отладки"
  • Решение для сборки

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

  • Создайте новое решение и выберите шаблон Visual С++ > Win32 > Консольное приложение Win32
  • Щелкните правой кнопкой мыши только что созданный проект и выберите "Свойства"
  • Измените конфигурацию для отладки.
  • Свойства конфигурации > C/С++ > Общие > Дополнительные каталоги включения: Добавить C:\gtest\include
  • Свойства конфигурации > C/С++ > Генерация кодa > Библиотека времени выполнения: если ваш код связан с DLL во время выполнения, выберите Multi-threaded Debug DLL (/MDd). Если нет, выберите Multi-threaded Debug (/MTd).
  • Свойства конфигурации > Коннектоp > Общие > Дополнительные библиотечные каталоги: Добавить C:\gtest\msvc\gtest\Debug или C:\gtest\msvc\gtest-md\Debug, в зависимости от местоположения gtestd.lib
  • Свойства конфигурации > Коннектоp > Ввод > Дополнительные зависимости: Добавить gtestd.lib

Проверка всех работ

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

    #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
    }
    
  • Отладкa > Начать отладку

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

Ответ 4

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

Ответ 5

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

  • Добавить\mypath\gtest-1.0.1\Отладка (или выпуск) в Common Properties- > Linker- > General- > Дополнительные каталоги библиотек
  • Добавить gtest.lib и gtest_main.lib в Common Properties → Linker- > Input- > Additional Dependencies

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

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

Ответ 6

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

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

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

Ответ 7

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

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

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

# Решение визуальной студии Googletest

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)