Куда пристроить модульные тесты в ABAP. Часть первая. Первый тест.

В умных книгах и статьях много про это написано в целом. Но вопрос по части специфики в ABAP-программировании раскрыт мало.

ABAP-программирование может быть совсем разным. Но почти в любом большом проекте его можно разложить на следующие кучи:

А теперь отдельно про экзиты.

Экзит – это отдельный метод класса или функциональный модуль строго определенного интерфейса с вашим ABAP-кодом, который вызывается в определённых бизнес-операциях(транзакциях) в некоторый определённый момент. Вроде плагина.

Классический случай: функциональный модуль замещения без глобальных данных. И пусть примером нам будет событие BTE 1120 (замещение при проводке бухгалтерского документа).

В случае экзитов, обычно тест заключается в выполнении пользовательской операции, которая связана с этим событием. Мы могли бы симулировать эту пользовательскую операцию, сохранить документ, и потом проверить этот документ на требуемые свойства. Но в том-то то и заключается одно из важных отличий модульного тестирования от обычного тестирования, что здесь так действовать не нужно.

У нас есть функциональный модуль с несколькими входными параметрами и несколькими выходными параметрами. Мы что-то подаём на вход, и на выходе получаем какое-то изменение.

Значит наш модульный тест должен быть таким:

 

Допустим, изначальная постановка была следующей:

Если проводится бухгалтерский документ вида VB и в позициях идёт проводка по дебету счёта 1080, то весь документ должен провестись с признаком “Красное сторно”.

Можно применить и TDD, но мы (пока) такую методологию не будем брать на вооружение.

В итоге мы написали в ФМ ZFI_BTE_00001120 некоторый код:

Исходный код, на который пишется тест

Код готов, мы хотим теперь написать тест для него.

Варианта два:

Я считаю мастер сделан почти с человеческим лицом, годный.

 

Сначала посмотрим на мастер, для этого заходим в группу функций и дальше по меню “Создать – Другие объекты – Сгенерировать тестовый класс”  и идём по шагам.

Класс создаётся не для конкретного ФМ, а для группы функций целиком:

Группа функций в мастере

Можно придумать имя для класса и поставить какие-то галочки:

Выбор класса в мастере

 

Выбираем, какие именно функциональные модули нам нужны:

Выбор ФМ в мастере

Далее, далее, далее… Смотрим,что нам мастер нагенерировал:

Заготовка тестового класса

 

Методы SETUP и TEARDOWN пустые. Движок будет запускать их соответственно в начале и в конце каждого теста.

К каждому выбранному функциональному модулю был сгенерирован тестовый метод строго по имени нашего ФМ.

И реализация базовой проверки в виде простого вызова уже есть:

Заготовка модульного теста

Как видите, ничего сверхъестественного мастер не сделал, значит мы можем и сами такие заготовки делать.

Если теперь накидать вокруг этого кода тест именно для нашего бизнес-сценария, то мы подойдём к промежуточному итогу.

 

Тест модульного теста

Я полагаю, что не обязательно полностью симулировать документ, если это не влияет на работу всего комплекса тестов: достаточно предоставить только самое необходимое для работы бизнес-сценария. Поэтому можно опустить даты, суммы, наличие кредитора, вид счёта и тому подобные параметры.

Получился годный рабочий сценарий, планирую использовать в боевой обстановке.

Можно накидать тесты и для других функциональных модулей в группе функций.

Теперь мы можем запускать модульные тесты по меню “Функциональный модуль – Выполнить – Тесты модулей”:

Если всё хорошо

Тихое, маленькое, зелёненькое, всё хорошо. А если бы мы ошиблись или в тесте, или в самом ФМ, то картина была бы такая:

А если всё плохо

Всё сломалось!

BTW: Вот наконец-то, есть применение табличным функциям! В моём текущем активном проекте большой апгрейд всё-таки произошёл, и теперь вместо старинных APPEND и READ можно писать такие вкусные штуки.

BTW: Там же рядом есть подпункт “С измерением покрытия”, но до него мы ещё доберёмся.

BTW: Да, есть огрехи в русской версии, не будем их осуждать.

На сегодня пока хватит…

Опубликовано 26.11.2015 в 19:58 · Автор ivan · Ссылка
Рубрики: ABAP

Написать комментарий