Wiki1CPP: ИспользованиеCPPUnit ...

Home Page | Каталог | Изменения | НовыеКомментарии | Пользователи | Вам запрещён доступРегистрация | Вход:  Пароль:  

Использование Cpp Unit? для юнит-тестирования внешних компонент

Что такое юнит-тестирование, можно посмотреть, например, здесь: 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?

Сначала необходимо собрать библиотеки 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?

Чтобы была возможность включения заголовочных файлов Cpp Unit? необходимо прописать директорию “Include” из пакета Cpp Unit? в “Tools” – “Options” – “Directories”.

Создание юнит-тестов

Для более подробного описания по созданию тестов смотрите документацию к Cpp Unit?. Рассмотрим краткий пример использования класса Text Fixture?. Этот класс позволяет выполнить ряд тестов для определенной тестовой ситуации.
Заголовочный файл:


Файл реализации:


Для завершения регистрации пакета тестов мы должны создать специальный файл, регистрирующий пакеты тестов с использованием специальных макросов Cpp Unit?:

Запуск тестов

Код в Dll Main?:

Необязательно запускать тесты в Dll Main?. Это можно сделать в специальном классе, а сам вызов запуска тестов подвесить на определенную команду главного меню. Однако Dll Main? удобнее тем, что дает возможность запускать тестирование нажатием одной кнопки в студии: прописываем в качестве исполняемого файла файл 1cv7(s).exe, в параметрах указываем открытие специальной тестовой БД. В тестовой конфигурации в ГМ вставляем загрузку нашей компоненты – тестового модуля.

Класс для взаимодействия с 1С

Класс C1CTestResultsCollector крайне прост: имя текущего теста выводится в строку состояния 1С, имя проваленных тестов выводится в окно сообщений 1С.


Заголовочный файл:


Файл реализации:


Страницы, ссылающиеся на данную: /Разработка Внешних Компонент


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]