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