Подтвердить что ты не робот

Современное тестирование на модуле С++?

Каковы наиболее современные подходы к модульному тестированию для языка С++? Класс языков с большей способностью к самоанализу (например, Python) имеет модульные модули тестирования, которые более естественны для использования. Модульные тесты могут быть определены более легко. Для сравнения, классический CppUnit (на основе JUnit), по-видимому, принимает очень консервативный подход. Есть ли что-то новое и лучшее, которое использует определенную силу С++ (или даже С++ 11), чтобы облегчить жизнь?

Я использовал структуру CppUnit некоторое время довольно упрощенно для частей проекта на родном С++ Windows (Visual Studio 2005 и 2010). Раньше мы не выбирали подход, основанный на тестировании, потому что уже было много устаревшего кода, и нам было сложно добавить тесты для него. Нам пришлось реорганизовать приложение, но добавление всех хороших тестов потребует много времени даже в этом случае.

Недавно мы переключились на Visual Studio 2013 (из-за стандартной реализации С++ 11), и мы собираемся начать новый, довольно долгосрочный проект.

Имея предыдущий хороший (небольшой) опыт работы с модульным тестированием, я хотел бы попробовать подход Test Driven Development. Поскольку проект не является крошечным (ожидаемый размер примерно такой же, как у более старого, т.е. Около 200 тыс. Строк кода), я предпочитаю более легкую (но не менее работоспособную) структуру.

Вероятно, новый проект может привести к кросс-платформенной реализации (Windows и Linux). В Visual Studio 2013 есть поддержка тестирования модулей, но у меня нет опыта работы с ней и как она будет соответствовать кросс-платформенной платформе.

До сих пор я нашел список модулей модульного тестирования для С++. Однако невозможно понять, как они отличаются в принципе. В настоящее время у меня есть три кандидата (консервативный выбор):

  • Boost - вероятный кандидат; тест для стандартов С++; поэтому вполне вероятно, что он будет широко принят; вероятно, самая большая группа пользователей. Он, кажется, более продвинутый, чем CppUnit.
  • CppUnit - я знаю это, но писать весь код вокруг - это не удовольствие.
  • Visual Studio 2013 встроенный - новый для меня, как-то может сгенерировать скелеты, вероятно.

В любом случае, похоже, что все три используют аналогичный подход. Возможно, VS2013 поддерживает генерацию кода, но это не означает, что он ведет к чему-либо более простому.

Есть ли радикально новый подход?

4b9b3361

Ответ 1

Единственная тестовая структура, которую стоит рассмотреть: Catch

Для введения в lib см. также здесь и здесь

Он прост в использовании (только для заголовка, состоящий только из одного заголовка), переносимый и, безусловно, самый простой и чистый синтаксис любой платформы тестирования модулей С++.

И в отличие от других библиотек, вам не нужно запоминать два десятка различных макросов f или разные типы утверждений.

Вы просто используете REQUIRE:

int one = 1;
REQUIRE( one == 2 );

который через некоторую умную перегрузку оператора покажет как исходное выражение, так и расширенные значения аргумента в выводе:

test.cc(7): FAILED:
  REQUIRE( one == 2 )
with expansion:
  1 == 43

По сравнению с этим, любая другая структура - это трудность использования IMO.

Раньше я использовал этот тест Boost.Test, но это было намного сложнее настроить и использовать. Мы используем CppUnit на работе, и это, по-видимому, должно быть настолько хрупким и болезненным, насколько это возможно.

Я кратко посмотрел на тестовую среду VS2013, но не пробовал, и это выглядит сносно, но очень похоже на эмуляцию "старой гвардии". На самом деле он не пытается быть чище, проще или лучше, чем CppUnit, Boost.Test и все остальные, которые появились до Catch. Поэтому я бы сказал, не беспокойтесь. Тесты должны быть легкими для написания (и для понимания), а Catch - светлее всех других фреймворков, которые я видел на этом фронте.

Ответ 2

Я использую Visual Studio 2013, встроенную в тестовую среду, около 6 недель и мне очень нравится. Интеграция отличная, и ее очень легко подобрать. Если вы работаете над проектом, который предназначен только для Windows, тогда я рекомендую его.