Для пользовательских типов надо, чтобы фреймворк поддерживал Mock-объекты:
http://ru.wikipedia.org/wiki/Mock-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82TDD на Западе очень популярен. Microsoft даже включил его в Visual Studio, начиная с версии 2012:
Причём они реализовали TDD так, что можно создавать классы и методы (загрушки) прямо из тестов. Таким образом, сначала пишем тесты, а потом открываем файл с классами и начинаем писать реализацию для методов (часто запуская тесты), пока вся полоса не будет зелёной. Вот здесь на примере можно понять философию методологии "Разработка через тестирование":
http://msdn.microsoft.com/en-us/library/hh212233.aspxК сожалению, QTest в Qt не поддерживает Mock-объекты, поэтому придётся изучать фреймворки "Google Mock" и\или "Boost Mock". На данном этапе, QTest вполне устраивает. Смог обойти проблему, что QTest не поддерживает тестирование исключений и сравнение вещественных чисел с дельтой. Для демонстрации есть пример:
- проект:
https://github.com/8Observer8/FiveAndFive- проект "Qt Unit Test":
https://github.com/8Observer8/FiveAndFiveTestsВ CppUnit это есть:
Сравнение вещественных чисел с дельтой:
C++ (Qt)
CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE( message, expected, actual, delta );
Тестирование на выброс исключения:
C++ (Qt)
CPPUNIT_ASSERT_THROW_MESSAGE( message, expression, ExceptionType );
Пример из фреймворка CppUnit:
C++ (Qt)
std::vector<int> v;
CPPUNIT_ASSERT_THROW_MESSAGE( "- std::vector<int> v;", v.at( 50 ), std::out_of_range );
Подробно о TDD написано в книгах:
- Мартин Фаулер - Рефакторинг. Улучшение существующего кода
- Кент Бек. Экстремальное программирование. Разработка через тестирование
- Р. Мартин. Быстрая разработка программного обеспечения. Принципы, практика, примеры (в примерах использованы языки C++ и Java)
- Мартин Р.С., Мартин М. - Принципы, паттерны и методики гибкой разработки на языке C# - 2011