Как использовать gmock с приложением MFC

У меня есть неуправляемое приложение mfc. Я хотел бы интегрировать некоторые модульные тесты для этого с помощью gmock. Я добавил все включения, библиотеки.

Но как мне запустить тесты?

Я знаю, что они используют основной метод для запуска теста в других случаях.

#include "gmock/gmock.h"

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

но поскольку приложения mfc не имеют основного метода, а метод InitInstance. Как мне запустить тест?


person Thusitha Thilina Dayaratne    schedule 27.03.2014    source источник


Ответы (1)


Google рекомендует создавать для тестов отдельный проект – проект test – с собственным int main. Их страница часто задаваемых вопросов ссылается на следующий ресурс для получения рекомендаций:

http://hassanjamilahmad.blogspot.com/2009/07/gtest-starters-help.html

(Это имеет смысл, если подумать. Нет никакой реальной причины развертывать модульные тесты в конечном продукте. Модульные тесты предназначены для использования разработчиками, а не вашими клиентами.)

Вкратце, вот общая установка:

  • Создайте пустой проект C++ и настройте его для сборки .exe
  • Определите int main в этом проекте и добавьте шаблонный код googletest, который вы упомянули.
  • Укажите, что тестовый проект зависит от вывода вашего основного проекта (в свойствах компоновщика).
  • Добавьте в этот проект событие после сборки, которое вызывает собственный вывод, тем самым автоматически запуская тесты.

Некоторые вещи, которых следует опасаться, основываясь на прошлом опыте:

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

  • Мы столкнулись с некоторыми проблемами при связывании (т. е. через компоновщик) нашего проекта MFC с тестовым проектом. В итоге мы извлекли код из проекта MFC в отдельные библиотеки и использовали googletest для тестирования этих библиотек. (Их было намного проще настроить, и в качестве бонуса они помогли с организацией кода.)

При редактировании. Чтобы уточнить, эти детали соответствуют googletest, но также применимы к gmock, так как gmock использует googletest под капотом.

person Lilshieste    schedule 27.03.2014