Как настроить GoogleTest и GoogleMock в Visual Studio? - PullRequest
0 голосов
/ 02 марта 2020

В Visual Studio 2017/2019 действительно легко настроить новый Проект Google Test и начать писать тесты (если вы все равно не возражаете против использования более старых версий GoogleTest).

Но как насчет использования GoogleMock? Вы можете подумать, что, поскольку Google какое-то время объединял gtest / gmock с go, это бы сработало. Просто #include "gmock/gmock.h" и издевайтесь. Но нет, пакет GoogleTest NuGet , который автоматически добавляется шаблоном, вообще не включает папку gmock.

Попытка добавить второй пакет GoogleMock NuGet вызывает множество проблем, таких как несовпадающие версии gtest / gmock, перекрывающиеся пути включения и т. Д. c.

Замена пакета Microsoft GoogleTest NuGet на один из Google вызывает ошибку ссылки:

MSVCRTD.lib(exe_main.obj) : error LNK2019: unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)

Так каков текущий рекомендуемый (и наименее болезненный) способ настройки GoogleTest / GoogleMock в Visual Studio? Тесты должны быть в состоянии обнаруживать, запускать и отлаживать с помощью Test Explorer.

1 Ответ

0 голосов
/ 02 марта 2020

Я нашел два способа настроить это: либо скомпилировать всю платформу GoogleTest непосредственно в каждом из тестовых проектов, либо создать библиотечный проект для его хранения. Использование библиотеки ускоряет сборку, но вам необходимо убедиться, что параметры компиляции / ссылки одинаковы для библиотеки и тестовых проектов.

Компиляция GoogleTest непосредственно в тестовом проекте


  1. Создайте новый проект из шаблона Google Test . Инструкции здесь при необходимости.
  2. Удалите Microsoft.googletest.v140.windesktop.msvcstl.stati c .rt-stati c NuGet.
  3. Установите последний пакет gmock NuGet от Google (в настоящее время v1.10.0).
  4. Добавьте файл gtest_main.cc в проект. Это должно быть в ..\packages\gmock.1.10.0\lib\native\src\gtest\src\

На этом этапе проект должен выглядеть примерно так (если это не так, попробуйте Разгрузка и Перезагрузка проект):

Solution Explorer View

Последний шаг настройки - отключение использования предварительно скомпилированных заголовков для трех файлов Google .cc ( Важно: обратите внимание и на пустые поля).

enter image description here

Использование GoogleTest в Stati c Библиотечном проекте


  1. Создайте новый проект из шаблона Stati c Library (C ++) . Инструкции здесь при необходимости.
  2. Удалить все сгенерированные .h / .cpp файлы (pch.h, pch.cpp, framework.h, <ProjectName>.cpp, et c)
  3. Установите последний пакет gmock NuGet от Google (в настоящее время v1.10.0).
  4. Отключите использование предварительно скомпилированных заголовков для проекта библиотеки (см. относящиеся к пи c выше).
  5. Создайте новый проект из шаблона Google Test . Инструкции здесь если необходимо.
  6. Удалите Microsoft.googletest.v140.windesktop.msvcstl.stati c .rt-stati c NuGet.
  7. Добавить файл gtest_main.cc в проект. Оно должно быть в ..\packages\gmock.1.10.0\lib\native\src\gtest\src\
  8. Отключить использование предварительно скомпилированных заголовков для gtest_main.cc (см. Соответствующий pi c выше).
  9. Добавить проект библиотеки в Ссылки проекта Project тестового проекта.
  10. Добавить ..\packages\gmock.1.10.0\lib\native\include\ в тестовый проект Включить каталоги в Каталоги VC ++

enter image description here

Структура решения теперь должна выглядеть примерно так:

enter image description here

Написание тестов


В любом случае, теперь вы готовы начать писать тесты с помощью GoogleMock. Добавьте add #include "gmock/gmock.h" в файл pch.h:

//
// pch.h
// Header for standard system include files.
//

#pragma once

#include "gtest/gtest.h"
#include "gmock/gmock.h"

Откройте сгенерированный файл Test.cpp и попробуйте его.

#include "pch.h"

class MockTest {
public:
    MOCK_METHOD(void, SomeMethod, ());
};

TEST(TestCaseName, TestName) {
    MockTest mock;
    EXPECT_CALL(mock, SomeMethod);
    mock.SomeMethod();
    EXPECT_EQ(1, 1);
    EXPECT_TRUE(true);
}
...