Академический Документы
Профессиональный Документы
Культура Документы
kfwjefoijwepofijwpioefjwoiefjwoeijf
табл 5
1
В Главе 3 я подробнее расскажу о функциональном тестировании в ABAP
и философии разработки через тестирование. Не буду забегать вперед и
приводить доводы, почему функциональное тестирование — это хорошо
(действительно, лучше ничего и быть не может). Вместо этого поговорим
о том, как ABAP in Eclipse справляется с двумя основными проблемами
при написании функциональных тестов.
PRIVATE SECTION.
2
METHODS:
first_test FOR TESTING RAISING cx_static_check.
ENDCLASS.
3
был создан раньше реального метода — в этом и заключается суть
разработки через тестирование.
METHOD first_monster.
WRITE:/ 'I am the First Monster'.
ENDMETHOD.
METHOD second_monster.
WRITE:/ 'I am the Second Monster'.
ENDMETHOD.
5
Листинг 1.14 Метод без тестирования
В SE80 вам нужно было бы выбрать путь меню Program • Test • Unit Test
(Программа •Тестирование • Функциональное тестирование). В ABAP in
Eclipse нужно лишь нажать сочетание клавиш (CTRL) + (SHIFT) +
(F10). Произойдет чудо: вы увидите все ошибки, которые могли возникнуть
в результате изменений кода. Нажав сочетание клавиш (CTRL) + (SHIFT)
+ (F11), вы перейдете на следующий уровень. (F11 лучше F10 по той же
причине, по которой шестизвездочный отель лучше пятизвездочного —
больше преимуществ.)
Вы видите два результата (Рис. 1.20). Во-первых, весь протестированный
код будет выделен. Еще важнее то, что откроется обзорный ракурс, в
котором отобразится процент охвата каждого метода автоматическими
функциональными тестами.
1.1.2 Отладка
6
Отладчик — один из лучших инструментов ABAP Workbench. В Главе 5 я
кратко расскажу о новых функциях отладчика, о которых вы можете еще
не знать. Напомню, что говорим мы об ABAP in Eclipse, и вы можете
задаться вопросом: зачем говорить об отладке в среде, которая
предназначена исключительно для разработки? Вернемся к
функциональному тестированию: при наличии ошибки нужно отладить
программу и найти причину.
7
IF rd_how_many = 4.
RETURN.
ENDIF.
ENDDO.
ENDMETHOD.
ENDCLASS. "Реализация количества монстров
START-OF-SELECTION.
CREATE OBJECT lo_counter.
ld_how_many = lo_counter->how_many_make_five( ).
WRITE:/ ld_how_many.
Листинг 1.15 Только четыре монстра
9
Рис. 1.21 Отладка в Eclipse
Вы видите ошибку: в коде указано значение 4, а не 5. Измените оператор
на IF RD_HOW_MANY = 5. На текущее выполнение это никак не повлияет
(а то можно было бы заподозрить черную магию), но после окончания
отладки и повторного прогона программы все встанет на свои места.
Результаты отображаются в так называемом «встроенном SAP GUI»,
стандартном экране SAP, открывающемся в окне Eclipse (Рис. 1.22). Во
время работы в Eclipse, если не получается отобразить что-то (например,
результаты оператора WRITE), задача переносится в SAP GUI.
10
Рис. 1.22 Встроенный SAP GUI
SELECT COUNT( * )
FROM sflight
WHERE carrid = 'AA'.
CHECK sy-subrc = 0.
ADD 1 TO gd_flying_monsters.
ENDDO.
Листинг 1.16 Гибрид SFLIGHT и монстра
12
выстроен график времени, затрачиваемого на выполнение программы.
Согласитесь, такое представление намного понятнее.
13
Eclipse — проект с открытым исходным кодом. Это значит, что если вам
чего-то в ней не хватает, то не нужно сидеть и вздыхать, нужно создать
недостающий инструмент самостоятельно, а затем опубликовать его как
плагин. Такой альтруизм приводит в недоумение кучу людей (ты отдаешь
плоды своего труда за просто так?). На практике, однако, этот подход
отлично работает, и благодаря ему программы обновляются со скоростью
света.
14
запускается как отдельная программа из SE38 или кода транзакции, но в
нашем случае он встроен в среду разработки.
15
появляется возможность экспортировать объект на жесткий диск в виде
сжатого файла с ценной информацией.
1.1.1 UMAP
16
Чтобы изучить возможности UMAP, нужно зайти на сайт www.uml2abap.org
и загрузить генератор кода UMAP, файл SAPlink для создания некоторых
классов, а затем установить программу в системе ABAP. В нашем случае
нужно загрузить файл из Eclipse и отправить его в SAP. Загруженный файл
содержит два вложения. Первое — файл с ценной информацией, на
основе которого создаются классы и программы ABAP с помощью
отчета ZSAPLINK. Второе — текстовый файл, который нужно
преобразовать в файл XML с помощью транзакции XLST_TOOL,
преобразования ZUMAP_FILE_PARSER и вставки кода из текстового
файла.
На сайте сказано, что нужно также загрузить плагин Eclipse, но это просто
отвлекающий маневр. На самом деле нужно открыть Eclipse, выбрать
пункт меню Help • Install New Software (Справка • Установка нового ПО) и
ввести ссылку. Откроется экран, показанный на Рис. 1.24.
17
Рис. 1.24 Установка плагина UML2ABAP для Eclipse.
18
произойдет, откройте новое окно и выберите путь Show View • Model
Explorer [Показать ракурс • Обозреватель моделей]).
20
Рис. 1.26 Схема программы-монстра в Eclipse
Пока переворачиваются песочные часы, на несколько секунд откроется
окно Accleo Generation Results (Результаты генерации в Accleo).
Платформа Accleo — тоже детище Obeo. Важно отметить, что теперь в
вашем проекте ReallyScaryMonster появился новый узел SRC-GEN. Он
содержит подчиненный узел NewModel.Umap. Нужно отправить
файл NewModel.umap на локальный компьютер. Это не составит никакого
труда: просто щелкните по нему правой кнопкой мыши и выберите
команду Export (Экспорт), а затем укажите папку на жестком диске. Потом
запустите в системе ABAP программу Z_UMAP_IMPORT и укажите только
что сохраненный файл.
21
Откроется экран, показанный на Рис. 1.27. Нажмите кнопку Import Object
(Импорт объекта). Затем откроется окно, в котором нужно выбрать новые
классы для импорта (или указать, что они являются локальными
объектами). Если все в порядке, зеленые индикаторы в нижней части
экрана покажут, что были созданы новые классы.
Если, как и я, вы не доверяете сообщениям компьютера и чувствуете
острую потребность все проверить, перейдите в саму систему ABAP через
стандартную панель входа и убедитесь, что классы действительно
созданы в SE24. Вздохнув с облегчением, вернитесь в Eclipse и взгляните
на сгенерированный код (Листинг 1.17). Помните, что в Eclipse все
отображается в ракурсе на основе исходного кода, тогда как в SE24 или
SE37 — в ракурсе на основе формуляра.
public section.
data MONSTER_NAME type INVALID .
data MONSTER_NUMBER type INVALID .
methods HOWL
22
importing
!NUMBER_OF_HOWLS type INVALID .
protected section.
method HOWL.
endmethod.
ENDCLASS.
Листинг 1.17 Сгенерированный код в Eclipse
Как и следовало ожидать, код в Eclipse был успешно сгенерирован,
включая подклассы (Листинг 1.18).
Примечание
Пока не удалось получить правильные типы TYPES для атрибутов, и
параметры метода не были скопированы. Этого и следовало ожидать,
прототип очень сырой, он используется только для проверки
концепции. В этом и есть суть проектов с открытым исходным кодом:
если чего-то не хватает, сделай сам.
class ZCL_REALLY_GREEN_MONSTER definition
public
inheriting from ZCL_REALLY_SCARY_MONSTER
create public .
public section.
public section.
data BLUENESS type INVALID .
protected section.
private section.
data NO_OF_BLUE_HATS type INVALID .
ENDCLASS.
1.1.2 Obeo
Плагин Obeo UML на момент написания книги существует только в виде
прототипа и еще не опубликован. Он предназначен для выполнения двух
задач: во-первых, для создания схем UML в Eclipse и, во-вторых, для
преобразования этих схем UML в программы ABAP.
24
Прототип от Obeo похож на адаптированную версию Eclipse и называется
Obeo Design Studio. И Obeo, и UMAP выполняют одинаковые функции.
Рассмотрим различия.
Как я уже говорил, на момент работы над книгой, этот плагин существует
только в виде прототипа и еще не вышел на рынок. Когда плагин будет
опубликован, за него придется платить.
1.2 Резюме
25
1 – По-английски «затмение» - «eclipse», прим. переводчика
2 – «Groovy» - клевый (англ.), прим. переводчика
26