10. boost, Visual Studio 8, 10 (минусы)
boost
• последнее изменение 2006/07 год
• нет своего mock
• имхо - проблемы с документацией
Студия
• через .Net
• тормоза
• только asserts
• + можно запустить 1 тест
• + улучшения в VS2012
11. Google Test Framework
Основная страница
http://code.google.com/p/googletest/
Документация для v1.6
http://code.google.com/p/googletest/wiki/V1_6_Documentation
Google C++ Mocking Framework
http://code.google.com/p/googlemock/
Дальше минимум подробностей обычного использования
Интересная статья: Why Are There So Many C++ Testing Frameworks?
12. Особенности GTF
• Portable: Windows, Linux, Mac
• Fatal & non-fatal assertions - возможность
делать несколько проверок в одном
тесте, без ущерба информативности
результатам (стандартная проблема
студии например: вылетает сразу и не
проверяет дальше)
• Можно писать информативные ассерты:
ASSERT_EQ(5, Foo(i)) << " where i = " << i;
13. Особенности GTF
• Google Test находит ваши тесты
"автоматически"
• Возможность писать свои ассерты
• Death tests - тест кода завершения
приложения, например при вызове
функции с определенным параметром.
14. Особенности GTF
• SCOPED_TRACE для локализации
проблем, при использовании функции с
ассертами в нескольких местах
15. Особенности GTF
• Возможность фильтрации при запуске
тестов
--gtest_filter=VMXprocessTest.*
• XML test report generation
--gtest_output=xml xml:$(TargetDir)
20. Еще особенности
• namespace - должен совпадать с SUT
(system under test)
• неперехваченные исключения в SUT: по
умолчанию перехватываются и тест
"красный". Но можно запустить с
"флажком" и будет вызвано стандартное
окошко по выбору дебагера
• обращение "мимо" вектора - завершение
тестов сразу и без фейлов :(
21. Еще особенности
• На каждый тест используется новый SUT:
SetUpTestCase+TearDownTestCase, глоба
льный SetUp & Tear-Down
(::testing::Environment)
• Получение информации о текущем тесте
(TestInfo) (например для подключения
нужных файлов в SetUp)
• Есть listener API, для обработки событий в
процессе запуска тестов
22. Еще особенности
• Запуск тестов заданное кол-во раз (до
бесконечности - пока не упадет)
• Есть возможность тестировать
исключения: по типу, просто что "было"
или "не было"
• Не использовать "_подчеркивание" в
именах тестовых классов и методов
23. Google C++ Mocking Framework
Mock vs Stub
http://maxshulga-ru.blogspot.com/2012/03/mock-vs-stub.html
28. Google C++ Mocking Framework
мокируются public, protected, private
virtual методы
non-virtual только через dependency
injection (можно сгенерировать класс-
mock, но надо самим его “подставить” в
production код, например через шаблоны)
возможность делегировать к методам
реального класса
29. А что же в итоге про legacy код?
Аккуратный рефакторинг
"Working Effectively with Legacy Code"
Метод Микадо
Используем С++!
30. Возможности С++
• разрываем зависимости через hpp
в тестах подставляем "свои" хедеры
• разрываем зависимости через шаблоны
выносим то, от чего зависим в параметры
шаблона
• дробим функции на части, одна из
которых и требует тестов
31. Как добраться до production кода
• прямое подключение исходников
(*. h, *.hpp, *.cpp)
• library (*.lib)
• export dll
• export классов