- PVSM.RU - https://www.pvsm.ru -

Быстрый старт с Google Test

Быстрый старт с Google Test
Google Test — это фреймворк от Google для юнит-тестирования кода на С++. Общей архитектурой он слегка напоминает общепринятые boost::test и CppUnit, хотя слегка отличается в деталях (как по мне — в лучшую сторону). Большая обзорная статья этого фреймворка уже как-то пробегала [1] на Хабре, но нынче она в каком-то побитом состоянии (код не отображается), да и кажется мне слишком сложной для начала работы. Поэтому я коротко опишу «Hello world» на Google Test, указав на несколько потенциальных проблем, с которыми вы можете столкнуться, используя Google Test при разработке под Visual Studio.

Сборка

  1. Загружаем архив с кодом [2], разархивируем.
  2. В папке gtest-1.6.0msvc есть два файла: gtest.sln и gtest-md.sln. Это файлы решений (Solution) Visual Studio. Отличаются они опциями сборки: gtest.sln собирает код с ключем /MT, а gtest-md.sln с ключем /MD. Если вы не знаете, за что отвечают эти ключи — можете почитать, к примеру, тут [3] или тут [4]. Вы должны скомпилировать тот же вариант, с которыми собирается проект, который вы собираетесь тестировать. Это важно, иначе получите кучу невразумительных ошибок линкера. Проверить, с какими ключами собирается ваш проект можно вот тут:

    Быстрый старт с Google Test

    Код Google Test успешно собирается Visual Studio 20082010 (другими не пробовал). На выходе вы получите файлы gtestd.libgtest.lib (для дебаг и релиз конфигураций). Со сборкой на этом всё.

Hello world

  1. Открываем Solution, который вы собираетесь тестировать. Добавляем в него новый проект (консольное С++ приложение).
  2. В этот проект добавляем зависимость от скомпиленных на втором шаге библиотек gtestd.libgtest.lib, путь к include-папке Google Test, зависимости к тем проектам в вашем решении, которые вы собираетесь тестировать.

    Быстрый старт с Google Test

    Быстрый старт с Google Test

  3. Пишем в главном файле тестового проекта следующий код:
    #include "stdafx.h"
    #include "gtest/gtest.h"
    
    class CRectTest : public ::testing::Test {
    };
    
    TEST_F(CRectTest, CheckPerimeter) 
    {
    	CSomeRect rect;
    	rect.x = 5;
    	rect.y = 6;
    	ASSERT_TRUE(rect.GetPerimeter() == 22);
    }
    
    int main(int argc, char **argv) {
    	::testing::InitGoogleTest(&argc, argv);
    	return RUN_ALL_TESTS();
    }
    

    Здесь мы тестируем некий класс прямоугольника на правильность вычисления периметра.

  4. Запускаем тестовый проект. Видим следующее:
    Быстрый старт с Google Test

Грабли

Номер один

Не ошибитесь с выбором компилируемого решения на втором шаге. Если ошибетесь и забудете — выяснить в чём ошибка позже будет фактически не реально.

Номер два

Если вы планируете разнести основное тестовое приложение и сами тесты по разным проектам, вы столкнётесь с одной хитрой проблемой. Дело в том, что гугловские юнит-тесы по сути являются статическими классами и компилятор Visual C++ из-за имеющегося нём бага попросту выкинет эти классы по ходу компиляции. Для избежания этого бага нужно выкрутиться способом, описанным вот тут [5].

Номер три

Не забывайте, что тестируемые статические библиотеки нужно не достаточно добавить в зависимости (Dependencies) тестового проекта, их нужно добавить в ссылки (References), иначе получим ошибки линковки.

Дополнительные материалы

Чуть более глубокая статья на Хабре [1]
Быстрый старт в родной документации [6]
Часто задаваемые вопросы [7]
Продвинутое использование фреймворка [8]
Плагин к Visual Studio для запуска тестов [9]

Успехов в тестировании.
С Новым Годом!

Автор: tangro

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/tdd/23882

Ссылки в тексте:

[1] пробегала: http://habrahabr.ru/post/119090/

[2] архив с кодом: http://code.google.com/p/googletest/downloads/detail?name=gtest-1.6.0.zip&can=2&q=

[3] тут: http://stackoverflow.com/questions/757418/should-i-compile-with-md-or-mt

[4] тут: http://msdn.microsoft.com/en-us/library/2kzt1wy3%28v=vs.80%29.aspx

[5] вот тут: http://code.google.com/p/googletest/wiki/Primer#Important_note_for_Visual_C++_users

[6] Быстрый старт в родной документации: http://code.google.com/p/googletest/wiki/Primer

[7] Часто задаваемые вопросы: http://code.google.com/p/googletest/wiki/FAQ

[8] Продвинутое использование фреймворка: http://code.google.com/p/googletest/wiki/AdvancedGuide

[9] Плагин к Visual Studio для запуска тестов: http://googletestaddin.codeplex.com/

[10] Источник: http://habrahabr.ru/post/164471/