Во-первых, я настоятельно рекомендую книгу Майкла Фезера "Эффективная работа с устаревшим кодом" . Это все о том, как добавить автоматизированные модульные тесты в устаревшее приложение, которое не имеет тестов. Если вам интересно, «как мне вообще начать тестировать эту кучу кода», тогда эта книга для вас.
Майкл также является автором CppUnit, NUnit-подобной среды тестирования с открытым исходным кодом для кода C ++. Вы можете найти его здесь: http://sourceforge.net/projects/cppunit/.
Один из простых и быстрых способов добавления тестов - добавить конфигурацию UnitTest в ваше решение. Эта конфигурация скомпилирует ваш код, но вместо того, чтобы связать его с вашим main.CPP, вы исключите ваш main.cpp из сборки и включите UnitTestMain.cpp, где вы будете размещать вызовы для выполнения модульных тестов. Мы начали так давно, когда не знали ничего лучшего. Тем не менее, вы тратите много времени, включая и исключая все различные модули testMyCode.cpp для различных конфигураций, и через некоторое время это утомляет. Мы обнаружили, что разработчикам такой подход не очень понравился.
Гораздо лучший подход - добавить проект модульного тестирования в ваше решение с зависимостью сборки от вашего реального проекта. Если проект называется Foo.vcproj, назовите его Foo_test.vcproj. Этот проект содержит только ваш тестовый код, он включает в себя ваши заголовки Foo и ссылки на ваши скомпилированные модули fooCode.obj. Добавьте вызов для выполнения Foo_test.exe в качестве шага после сборки сборки Foo_test, и он автоматически запускает модульные тесты во время сборки. Если какой-либо модульный тест не пройден, сборка завершится неудачно. Если на вашем сервере сборки настроены проверки с использованием gated, никто не сможет проверить изменения, которые нарушают существующие тесты.