2009-11-25 3 views
1

Есть ли хорошая книга или онлайн-сайт, где обсуждается использование CppUnit для новичков?Как использовать блок cpp

+1

Что вас раздражает: CppUnit сам по себе - или, вообще говоря, модульное тестирование? – philant

+0

его больше юнит-тестирование, но я понимаю, что CppUnit является самой популярной средой. – Eli

+0

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

ответ

2

Unit-тестирования позволяет тестировать классы в изоляции, один метод за один раз.

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

Отличный способ достижения модульного тестирования - Test-Driven Development (TDD), где блок-тесты записываются перед кодом. Хотя это может показаться странным вначале, это позволяет получить код, который можно тестировать (и тестировать). Если код написан первым, тогда он может быть легко проверен.

Процесс TDD заключается в следующем:

RED: написать тест, который не ЗЕЛЕНЫЙ: написать достаточно просто код, чтобы сделать его пройти Refactor: Ыборка код, удалить дублирование


I Не уверен, что CppUnit является наиболее широко используемым. Это перенос jUnit - рамки Java, но он довольно тяжелый; существуют упрощенные версии: CppUnitLite, NanoCppUnit, а также Cxxtest, Boost.Test и TUT, см. this list в Википедии. Если вы не привязаны к CppUnit, есть article comparing them.

4

Когда вы начинаете использовать модульное тестирование, не ставьте целью 100% -ное покрытие - таким образом, это безумие.

Посмотрите, чтобы покрыть все основные методы в классе (низко висящие фрукты).

Когда я начал модульное тестирование (через UnitTest++), я пошел на полный охват, создав методы, которые должны быть защищены персоналом, а затем с помощью классов-оболочек, чтобы их можно было протестировать. Шов функционирует так, чтобы я мог тестировать классы, которые были ближе к металлу.

Хорошая книга по модульным испытаниям - Working Effectively with Legacy Code, которая, несмотря на название, говорит о разработке зеленых полей, хорошо написана и имеет хорошие примеры для загрузки.

Обновление: Также не беспокойтесь о том, чтобы покрыть каждую возможность в начале при написании тестов. Вы пропустите некоторые вещи. У меня когда-то был тест, который прошел, но в этой функции был сбой кода в реальном времени. Запуск входов через тест показал, что было не так, и позволил мне переписать функцию, чтобы она прошла все тесты. Первоначальный тест продержался около 7 или 8 месяцев, прежде чем клиент (к сожалению, для меня) обнаружил ошибку.

+0

Хорошая книга для использования при тестировании модулей - это дизайн [Large Scale C++ Design] Джона Лакоса (http://www.amazon.com/Large-Scale-Software-Design -John-Lakos/dp/0201633620/ref = sr_1_1? Ie = UTF8 & s = books & qid = 1259140273 & sr = 8-1), в частности части об уровне, чтобы вы могли сосредоточиться на модуле, проверяющем ваши функции уровня 0, а затем до вашего тестового набора уровня за раз. –

+0

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

0

Книга, которую я обратился к для «вдохновения» работает эффективно с унаследованным кодом Майкл Перья.Он автор CppUnit и написал эту книгу, чтобы помочь добавить модульное тестирование к большому наследию проекта. Если вы только начинаете новый проект, это вряд ли поможет вам, но если вы пытаетесь получить модульные тесты в старый проект, у него есть много хороших идей.

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

Я только что взял тестовые образцы xUnit от Джерарда Мезароса. Он действительно прибыл вчера, поэтому я прочитал только первые несколько глав и не могу в полной мере рекомендовать его так или иначе. Но до сих пор он предоставил надежные советы по философии автора автоматизированного модульного тестирования, и это может быть то, что вы ищете.