Как вы реализуете модульное тестирование в крупномасштабных проектах на C ++?[закрыто]

StackOverflow https://stackoverflow.com/questions/91683

  •  01-07-2019
  •  | 
  •  

Вопрос

Я твердо верю в использование модульных тестов как части создания больших мультиплатформенных приложений.В настоящее время мы планируем провести наши модульные тесты в рамках отдельного проекта.Преимущество этого заключается в том, что наша кодовая база остается чистой.Я думаю, однако, что это отделило бы тестовый код от реализации модуля.Что вы думаете об этом подходе и существуют ли какие-либо инструменты, подобные JUnit, для приложений на c ++?

Это было полезно?

Решение

Существует множество фреймфорков тестовых модулей для C ++.CppUnit, конечно, не тот, который я бы выбрал (по крайней мере, в его стабильной версии 1.x, поскольку в нем не хватает многих тестов и требуется много избыточных строк кода).Пока что мой предпочтительный фреймворк - это CxxТест, и я планирую оценить Фруктоза когда-нибудь.

В любом случае, есть несколько "работ", в которых оцениваются фреймворки C ++ TU :

Другие советы

Это разумный подход.

Я добился очень хороших результатов как с Единичный тест++ и Повышение.Тест

Я просмотрел CppUnit, но для меня это было больше похоже на перевод материала JUnit, чем на что-то, ориентированное на C ++.

Обновить: В наши дни я предпочитаю использовать Поймать.Я нашел его эффективным и простым в использовании.

Вы должны отделить свой базовый код от общей (динамической) библиотеки, а затем написать основную часть ваших модульных тестов для этой библиотеки.

Два года назад (2008) Я был вовлечен в крупный проект инфраструктуры LSB, развернутый Linux Foundation.Одной из целей этого проекта было написание модульных тестов для 40 000 функций из основных библиотек Linux.В контексте этого проекта мы создали Азов технологий и базовый инструмент , названный Автотест работоспособности API для того, чтобы автоматически генерировать все тесты.Вы можете попробовать использовать этот инструмент для создания модульных тестов для вашей базовой библиотеки (библиотек).

Я использую UnitTest ++.Тесты находятся в отдельном проекте, но сами тесты переплетены с самим кодом.Они существуют в папке под тестируемым разделом.т. е.:
MyProject\src - Мой проект\src\ <- источник самого приложения
MyProject\src\тесты <- источник тестов
Если у вас есть вложенные папки (а у кого их нет), то у них тоже будет свой собственный подкаталог ests.

Cppunit - это прямой эквивалент Junit для приложений на C ++ http://cppunit.sourceforge.net/cppunit-wiki

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

Однако в итоге я занялся этой гимнастикой по кодированию, поскольку интегрировал тесты в устаревший код.Если вы начинаете с целью модульного тестирования, лучший дизайн может быть простым.

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

Можно легко написать сценарии для запуска всех наборов тестов в вашем дереве исходных текстов и сбора результатов.

Я уже много лет с большим успехом использую настроенную версию оригинального CppUnit, но сейчас есть и другие альтернативы. Гуглтест выглядит интересно.

Я думаю, что вы на правильном пути с модульным тестированием, и это отличный план по повышению надежности вашего продукта.

Хотя модульное тестирование не решит всех ваших проблем при переводе вашего приложения на разные платформы или даже в разные операционные системы.Причина этого заключается в том, что процесс модульного тестирования используется для выявления ошибок в вашем приложении.Он просто-напросто вводит в вашу систему столько входных данных, сколько только можно себе представить, и ожидает результата на другом конце.Это все равно что заставить обезьяну постоянно стучать по клавиатуре и наблюдать за результатами (бета-тестеры).

Чтобы перейти к следующему шагу, при хорошем модульном тестировании вам нужно сосредоточиться на внутреннем дизайне вашего приложения.Лучший подход, который я нашел, состоял в использовании шаблона проектирования или процесса проектирования, называемого "контрактное программирование" или "Проектирование по контракту".Другой книгой, которая очень полезна для обеспечения надежности вашего основного проекта, была.

Отладка процесса разработки:Практические стратегии для сохранения концентрации, соблюдения сроков поставок и создания сплоченных команд.

В нашей команде разработчиков мы очень внимательно изучили то, что мы считаем ошибкой программиста, разработчика, конструктора, и как мы могли бы использовать модульное тестирование, а также повысить надежность нашего программного пакета с помощью DBC и следуя рекомендациям по отладке процесса разработки.

Использование tut http://tut-framework.sourceforge.net/ очень просто, только заголовочный файл, без макросов.Может генерировать XML-результаты

CxxТест также стоит обратить внимание на легкий, простой в использовании кроссплатформенный фреймворк JUnit / CppUnit / xUnit-подобный для C ++.Мы считаем, что добавлять и разрабатывать тесты очень просто

Эйрин стоит ли обратить внимание на другой фреймворк тестирования C ++

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top