C++ unit testing framework [закрыто]
Я использую платформу тестирования Boost для моего кода C++, но с ней есть две проблемы, которые, вероятно, являются общими для всех тестовых платформ C++:
- нет способа создать автоматические тестовые заглушки (например, путем извлечения публичных функций из выбранных классов).
- вы не можете запустить один тест - вы должны запустить весь "набор" тестов (если вы не создадите много разных тестовых проектов, я думаю).
кто-нибудь знает лучше Testing framework или я навсегда завидую тестовым инструментам, доступным для разработчиков Java/.NET?
18 ответов:
Я только что ответил на очень похожий вопрос. Я закончил с использованием Ноэль Ллопис' UnitTest++. Мне это понравилось больше, чем boost::test, потому что он не настаивал на реализации основной программы тестового жгута с макросом - он может подключаться к любому исполняемому файлу, который вы создаете. Он страдает от того же обременения boost::test в том, что он требует, чтобы библиотека была связана. Я использовал CxxTest, и он подходит ближе, чем что-либо еще в C++ - land для автоматического создания тестов (хотя для этого требуется, чтобы Perl был частью вашей системы сборки). C++ просто не предоставляет крючки отражения, которые делают языки .NET и Java. Средства MsTest в Visual Studio Team System - Developer's Edition будут автоматически генерировать тестовые заглушки неуправляемого C++, но для этого методы должны быть экспортированы из DLL, поэтому он не работает со статическими библиотеками. Другие тестовые платформы в мире .NET также могут иметь эту способность, но я не знаком ни с одним из них. Так что прямо сейчас мы используйте UnitTest++ для неуправляемого C++, и в настоящее время я решаю между MsTest и NUnit для управляемых библиотек.
Я только что толкнул свою собственную структуру,лови, там. Он все еще находится в стадии разработки, но я считаю, что он уже превосходит большинство других фреймворков. У разных людей разные критерии, но я пытался охватить большую часть земли без слишком большого количества компромиссов. Взгляните на мою связанную запись в блоге для дегустатора. Мои пять лучших функций:
- только заголовок
- автоматическая регистрация тестов на основе функций и методов
- разлагает стандартный C++ выражения в LHS и RHS (поэтому вам не нужно целое семейство макросов assert).
- поддержка вложенных разделов в функции на основе приспособления
- тесты имен с использованием естественного языка-имена функций/ методов генерируются
Это не у поколения пней-но это довольно специализированная область. Я думаю амортизатор++ это первый инструмент, чтобы действительно сделать это. Обратите внимание, что насмешливые/ заглушающие рамки обычно независимо от рамок модульного тестирования. CATCH особенно хорошо работает с макетными объектами, поскольку тестовое состояние не передается по контексту.
Он также имеет привязки Objective-C.
[обновление]
только что случилось с этим моим ответом несколько лет назад. Спасибо за все замечательные комментарии! Очевидно, улов развился на много в то время. Теперь он поддерживает тестирование стиля BDD (задано/ когда / тогда), теги, теперь в один заголовок, и множество внутренних улучшений и уточнений (например, более богатая командная строка, четкий и выразительный вывод и т. д.). более актуальное сообщение в блоге здесь.
взгляните на платформу тестирования Google C++.
Он используется Google для всех своих собственных проектов C++, поэтому он должен быть довольно хорошим.
http://googletesting.blogspot.com/2008/07/announcing-new-google-c-testing.html
импульс.Тест позволяет запускать тестовый случай по имени. Или тестовый набор. Или несколько из них.
импульс.Test не настаивает на реализации main, хотя это позволяет легко сделать это.
импульс.Тест не обязательно использовать в качестве библиотеки. Он имеет один вариант заголовка.
Я большой поклонник UnitTest++, это очень легкий, но делает работу. Вы можете легко запускать там одиночные тесты.
большой вопрос! Несколько лет назад я постоянно искал что-то стоящее использования и не нашел. Я искал что-то, что было очень легким и не требовало от меня ссылки в некоторых библиотеках... ты же знаешь что-то я мог бы получить в течение нескольких минут.
однако, я упорствовал и в конечном итоге наткнулся cxxtest.
на сайте:
- не требует RTTI
- не требует функции шаблона члена
- не требует обработки исключений
- не требует никаких внешних библиотек (включая управление памятью, файл/консоль ввода/вывода, графических библиотек)
- распространяется полностью как набор заголовочных файлов (и скрипт python).
Вау... супер просто! включите файл заголовка, производный от тестового класса, и вы выключены и запущены. Мы использовали это за последние четыре года, и я все еще не нашел ничего, что мне больше нравится.
попробовать WinUnit. Это звучит отлично, и рекомендуется Джон Роббинс.
http://groups.google.com/group/googletestframework, но это довольно новый
Мне нравится платформа модульного тестирования Boost, главным образом потому, что она очень легкая.
Я никогда не слышал о структуре модульного тестирования, которая будет генерировать заглушки. Я вообще совершенно не убежден в генерации кода, хотя бы потому, что он очень быстро устаревает. Может быть, это становится полезным, когда у вас есть большое количество классов?
сторонник разработки на основе тестов, вероятно, сказал бы, что это фундаментально, что вы запускаете весь тест люкс каждый раз, чтобы убедиться, что вы не ввели регрессии. Если выполнение всех тестов занимает слишком много времени, возможно, ваши тесты слишком велики или делают слишком много вызовов интенсивных функций процессора, которые должны быть высмеяны? Если это остается проблемой, тонкая обертка вокруг модульных тестов boost должна позволить вам выбрать свои тесты и, вероятно, будет быстрее, чем изучать другую структуру и переносить все ваши тесты.
Я использую tut-framework
Aeryn еще один фреймворк стоит посмотреть
Visual Studio имеет встроенную платформу модульного тестирования, это отличная ссылка для настройки тестового проекта для консольного приложения win32:
http://codeketchup.blogspot.ie/2012/12/unit-test-for-unmanaged-c-in-visual.html
Если вы работаете над статическим проектом DLL, его гораздо проще настроить, поскольку другие указали на внешние фреймворки tesing, такие как GTest и Boost, имеют дополнительные функции.
CppUnit было первоначальное почтение к JUnit.
Eclipse/JUnit-это твердый пакет для java, и для обоих есть расширения / эквиваленты C++. Он может делать то, о чем вы говорите. Конечно, вы должны были бы изменить IDEs...
Я тоже поклонник UnitTest++.
загвоздка в том, что исходный дистрибутив содержит почти 40 отдельных файлов. Это абсурд. В управлении задачами управления версиями и сборки для простого проекта преобладает просмотр всех этих файлов модульного тестирования.
Я изменил UnitTest++ так, что он может быть интегрирован с проектом, добавив один .h и .файл cpp. Это я окрестил "симпатичным". Подробности здесь http://ravenspoint.com/blog/index.php?entry=entry080704-063557
Он не генерирует автоматически тестовые заглушки, как указано в исходном вопросе. Я не могу не думать, что такая функция будет больше проблем, чем стоит, создавая огромное количество бесполезных функций доступа для тестирования кода.
Я бы предположил, что автоматическое выключение тестовых функций будет больше функцией (скриптов для фреймворка или) рассматриваемой среды разработки. Предположительно приложения CodeGear C++Builder будут быстро генерировать тестовый код для пользовательских функций.
библиотека фруктозы Эндрю Марлоу стоит проверить... http://fructose.sourceforge.net/
Я помню его документы, содержащие довольно подробный анализ и сравнение других предложений в то время, когда он писал фруктозу, но не могу найти URL-адрес непосредственно к этому документу.
Я пробую иглу, также заголовок только C++ test suite, даже это две включенные зависимости только заголовок.
Итак, все довольно просто и просто. Помимо включенного примера на github, есть примеры и более подробная информация на главном сайте,igloo-testing.org. я обновлю это позже, когда получу больше опыта работы с ним и другими фреймворками.
Comments