Я принимаю проект, который предоставляет компоненты через ATL.
Я вижу две основные области для модульного теста, охватываемые этой настройкой:
- Тестирование внутренних компонентов (может или не может быть выставлено через COM)
- Тестирование внешних открытых компонентов (или тестирование открытого интерфейса)
В настоящее время в рамках проекта все модульные тесты внутренних компонентов находятся внутри решения.Они активируются с помощью флага препроцессора, который компилирует его и запускает при запуске.
Из проведенного мною исследования выясняется, что «нормой» является размещение модульного тестирования в другом подпроекте и наличие хуков подачи основного решения для модульных тестов для доступа к внутренним компонентам.При такой настройке решение для модульного тестирования устанавливает зависимость от тестируемого решения.Является ли это действительно «нормой», или есть много людей, которые размещают свои модули модульного тестирования в тестируемом решении (иначе говоря, модульный тест не подпроект, а скорее свободные cppsкоторые #ifdef
вышли бы, если флаг препроцессора не указан)?
Похоже, что используемой в настоящее время платформой для модульного тестирования является cppunit, и я подумывал о том, чтобы переключить ее на gtest и попытаться перенести все в другой подпроект, но я хочу убедиться, что усилия того стоят.в долгосрочной перспективе.
Один из способов, о котором я думал, это __declspec
тестируемые классы, и они доступны только тогда, когда определено определение препроцессора.Тогда отдельный подпроект модульного тестирования позволил бы этому препроцессору сообщить основному решению выставить внутренности.Я просто не уверен, что это лучший маршрут.
Итак, мои вопросы таковы:
- Является ли нормой помещение модульных тестов в отдельный (под) проект и предоставление компонентов из источника, который будет тестироваться (либо через ловушки,предоставление определения класса и т. д.)?
- Каков наилучший способ предоставления внутренних компонентов из библиотеки DLL COM?
- Будет ли флаг препроцессора, который разрешает
__declspec
для внутренних компонентов бытьпроверил плохую идею?Кто-нибудь еще делал это с помощью своих модульных тестов, где тестируемый элемент обычно не экспонируется во время нормальной работы?
Спасибо за комментарии!