Фреймворки для юнит-тестов C++
Для написания юнит-тестов и моков вам понадобятся хорошие фреймворки. К счастью, сегодня существует много разных программ с широкой функциональностью. Рассмотрим некоторые из них.
- GTest/Gmock — мощная пара, которая считается по сути стандартом модульного тестирования в языке программирования C++. Можно даже сказать, что на протяжении долгого времени именно GMock был той единственной движущей силой в мире мок-фреймворков на C++. Преимущество вышеописанного инструмента очевидно: если у вас есть GMock, то GTest вы получите в комплекте. Но есть и недостаток: нужно собирать GTest/GMock в одной конфигурации с проектом, а это уже может заставить вас немного попотеть.
- Catch — фреймворк для модульного тестирования, совместимый не только с C++. Развёртывание с его помощью производится посредством подключения одного заголовочного файла к тестируемому проекту, в результате чего можно сразу приступать к работе. У фреймворка есть много плюсов для «плюсов»: мощнейший функционал для создания assert’ов, удивительная фича под названием «sections», именованные тесты и т. д. В целом, Catch — это набор простых, но полезных инструментов.
- Mettle — этот фреймворк чуть отличается от других, однако в нём собрано множество хороших идей. Это и полная настройка assert’ов и различный синтаксис, добавляемый этой возможностью. Можно уверенно сказать, что данный инструмент поможет лучше понять модульное тестирование и облегчит его использование.
- Boost.Test — не что иное, как часть boost-библиотеки и некоторых проектов, в которых она применяется. Некоторые считают, что данный фреймворк слишком перегружен. Впрочем, у него есть и свои поклонники.
А что насчёт мок-фреймворков?
Как уже упоминалось, GMock был единственным мок-фреймворком для C++ в течение длительного времени. На тот момент это было связано с большой популярностью Google и GTest. Но сегодня у разработчиков C++ существует масса других вариантов:
— есть инструменты типа Trompeloeil — они имеют понятный синтаксис и разворачиваются посредством подключения одного заголовочного файла; — есть просто потрясающие библиотеки, такие как FakeIt. Они помогают программистам писать фиктивные объекты (стабы и моки), используя для этого минимум кода и синтаксис, знакомый всем, кто когда-либо использовал Mockito (Java) либо какой-нибудь .NET-фреймворк для написания моков; — остаётся добавить, что есть ещё и HippoMocks, который может стать очередной альтернативой, на которую стоит обратить внимание уже сейчас.
Хотите увидеть синтаксис вышеописанных фреймворков? Это можно сделать в следующем репозитории на GitHub. И не забывайте писать в комментариях, какие фреймворки предпочитаете вы.
Материал подготовлен специально для OTUS и является отрывком из статьи Д. Хэлпера «Getting started with C++ unit testing».