GoogleTest vs CppUnit: факты
В процессе настройки нашей платформы тестирования модулей С++ в течение следующих лет мы кратко отметили GoogleTest и CppUnit. У меня есть некоторый опыт работы с обоими, и мое тяжелое предпочтение - GoogleTest. В любом случае, чтобы убедить моего босса, мне нужны некоторые факты, поэтому я читал в Интернете, в том числе руководства, страницы вики и некоторые источники. Я придумал список преимуществ GoogleTest и одно преимущество CppUnit (графические тестовые ролики). Здесь они упорядочены с помощью воспринимаемой полезности:
- INSTANTIATE_TEST_CASE_P для создания экземпляра тестового примера с любым набором необходимых параметров, включая декартовы продукты
- FRIEND_TEST для тестирования частных членов класса (для всего устаревшего кода)
- превращение утверждений в точки останова
- нефатальные утверждения
- "из коробки" интеграция googlemock
- обнаружение автоматических тестов, нет необходимости перечислять их
- можно отключить и включить
- тесты для запуска могут быть выбраны с использованием шаблонов имен
- значения/параметры, параметризованные параметрами
- пользовательский предикат утверждает
- тесты смерти
- гораздо более богатый набор утверждений
- тип утверждает
- утверждение подпрограмм
- дополнительная информация об отладке может быть добавлена к утверждениям с использованием <
- RecordProperty испускает последнее значение свойства для вывода XML
- SCOPED_TRACE помогает понять контекст ошибки утверждения, возникающей из подпрограммы или цикла.
- вывод xUnit XML, может быть показан Дженкинсом сразу без преобразования XSLT между
- поддерживает принтеры пользовательских типов.
- время, затрачиваемое на индикацию теста (я подозреваю, что это также возможно с CppUnit, но я еще не понял его)
- test listener API (пользовательские плагины)
- тестовая перетасовка
- исключений и RTTI
Правильно ли я полагаю, что все вышеперечисленное не поддерживается CppUnit? Есть ли полезная функция GoogleTest недоступна в CppUnit Мне не хватает?
И последнее, но не менее важное: есть ли какие-нибудь хорошие функции CppUnit, отсутствующие в GoogleTest ?
Спасибо!
Ответы
Ответ 1
Если вы используете более старую версию gcc-компилятора или если ваш код в тестах работает на vxWorks (или VxSim), у вас может быть больше шансов с помощью cppUnit, чем в структуре Googletest.
С другой стороны, еще одна особенность структуры googletest - наличие трех разных уровней настройки/разрыва:
- для каждой программы
- для каждого тестового примера (или тестовой группы)
- для отдельных тестовых экземпляров
Не уверен, поддерживается ли это в cppUnit, но это может пригодиться, особенно в старых системах.
Кроме того, для Eclipse CDT есть плагин googletest.
Ответ 2
Это те преимущества, которые я вижу. Есть несколько тестовых бегунов GUI:
Я использовал первый, и он работает очень хорошо, хотя он в разработке и нуждается в некоторой работе. Не знаю, есть ли другие варианты.
Ответ 3
Если вы не просмотрели xUnit ++, я сделал это специально, потому что был недоволен тем, что было доступно (включая gtest). Большая часть вашего списка поддерживается, а если нет, если это функция "должна иметь", я бы, вероятно, захотел ее добавить.