Что такое юнит-тестирование, можно посмотреть, например, здесь: http://ru.wikipedia.org/wiki/Юнит-тестирование.
Cpp Unit? можно взять здесь: http://sourceforge.net/projects/cppunit.
Т.к. внешняя компонента для 1С представляет собой DLL, то и для тестирования было бы логично использовать DLL-модуль. Более того, было бы желательно, чтобы модуль тестирования (содержащий и запускающий юнит-тесты) представлял собой внешнюю компоненту для 1С. Это позволило бы протестировать не только работу отдельных модулей нашей компоненты, но и их взаимодействие с 1С.
В процессе разворачивания Cpp Unit? было обнаружена неработоспособность GUI-модуля тестирования Cpp Unit? в среде 1С. Максимум, что удалось получить играми с Afx Set Resource Handle? – это открытие стандартного диалога тестов. Но при попытке запустить тестирование происходит подвисание Cpp Unit? где-то в недрах ntdll (похоже, стопор происходит на каком-то объекте синхронизации). Поэтому было решено отказаться от стандартного GUI-модуля. Вместо этого был реализован специальный класс для взаимодействия с модулем тестирования Cpp Unit?. Данный класс обеспечивает вывод информации о процессе тестирования и обнаруженных сбоях средствами 1С.
Используем рекомендации статьи Создание внешней компоненты. Наиболее работоспособный вариант был получен при создании DLL типа «MFC Extension DLL (using shared MFC DLL)".
Сначала необходимо собрать библиотеки Cpp Unit.lib? и Test Runner.lib? из исходников Cpp Unit?. Собираем их в конфигурации Release. После этого помещаем эти библиотеки в какую-нибудь специально выделенную директорию с библиотеками. Далее прописываем эту директорию в Tools – Options – Directories. Теперь осталось только в свойствах проекта («Project – Settings – Link) в поле «Object/library modules прописать "Cpp Unit.lib?" и "Test Runner.lib?". Это надо сделать для обоих конфигураций: Debug и Release.
Чтобы была возможность включения заголовочных файлов Cpp Unit? необходимо прописать директорию Include из пакета Cpp Unit? в Tools – Options – Directories.
Для более подробного описания по созданию тестов смотрите документацию к Cpp Unit?. Рассмотрим краткий пример использования класса Text Fixture?. Этот класс позволяет выполнить ряд тестов для определенной тестовой ситуации.
Заголовочный файл:
Файл реализации:
Для завершения регистрации пакета тестов мы должны создать специальный файл, регистрирующий пакеты тестов с использованием специальных макросов Cpp Unit?:
Код в Dll Main?:
Необязательно запускать тесты в Dll Main?. Это можно сделать в специальном классе, а сам вызов запуска тестов подвесить на определенную команду главного меню. Однако Dll Main? удобнее тем, что дает возможность запускать тестирование нажатием одной кнопки в студии: прописываем в качестве исполняемого файла файл 1cv7(s).exe, в параметрах указываем открытие специальной тестовой БД. В тестовой конфигурации в ГМ вставляем загрузку нашей компоненты – тестового модуля.
Класс C1CTestResultsCollector крайне прост: имя текущего теста выводится в строку состояния 1С, имя проваленных тестов выводится в окно сообщений 1С.
Заголовочный файл:
Файл реализации: