РАЗРАБОТКА ABAPP1L2

ABAP: проектирование кода для изолируемых тестов

Границы бизнес-логики, внедрение зависимостей, тестовые двойники и TEST-SEAM. Ограничения по версиям указаны отдельно; запуск тестов в SAP не заявляется.

Ревизия 1 Общие понятия Частичное покрытие Контекст: CTX-GENERAL документальная опора: недостаточно данных
Справочный материал. Контракты данных, архитектурные решения и ограничения применения. Источники приведены в материалах, где используются внешние основания.

ABAP: проектирование кода для изолируемых тестов#

Тестируемость финансовой логики зависит от того, можно ли отделить вычисление от чтения базы, системного времени, вызовов функций, пользовательского ввода и внешних сервисов. Здесь описан способ выбрать тестовую границу. Это справочное руководство по архитектуре ABAP, а не свидетельство компиляции или запуска примеров в SAP.

Начните с наблюдаемого контракта#

Опишите поведение через входы, выходы и ошибки. Например, распределение суммы между получателями должно сохранять общий итог, а равные остатки разрешаются стабильным правилом. Такой контракт можно проверять отдельно от поиска данных, выбора периода и сохранения документа.

Полезная граница отделяет вычисление от окружения:

Часть Ответственность Как проверять
Расчёт Правила распределения, округления и сверки Фиксированные входы, границы и инварианты
Порт данных Получить исходные позиции и параметры Двойник возвращает подготовленный набор строк
Порт времени или курса Определить дату, курс или календарь Явно заданные значения сценария
Адаптер платформы Вызвать таблицы, API или функции SAP Интеграционная проверка в подходящей системе

Не каждому классу нужен интерфейс. Выделяйте зависимость, если она меняется отдельно, создаёт побочный эффект или мешает детерминированному тесту. Лишние уровни абстракции усложняют код и сопровождение.

Внедрение зависимости и двойники#

При внедрении зависимости объект получает collaborator через конструктор или параметр вместо того, чтобы создавать его внутри бизнес-метода. В тесте production-компонент заменяется заглушкой, fake или mock-объектом. Заглушка возвращает фиксированный ответ; mock может также проверять ожидаемое взаимодействие. Двойник описывает конкретный тестовый сценарий, а не внутреннее устройство настоящей системы.

ABAP OO Test Double Framework позволяет настраивать поведение вызовов и проверять взаимодействия. Документация SAP указывает поддержку глобальных интерфейсов и глобальных классов на подходящих версиях backend. Также перечислены ограничения для локальных типов и некоторых видов классов, конструкторов и методов. Перед выбором этого средства проверьте версию и ограничения целевой системы.

Небольшой финансовый пример: сервис распределения получает допустимых получателей через интерфейс-поставщик данных. Тест передаёт двойнику две позиции и сумму 101, запускает расчёт, проверяет суммы получателей, сохранение итога и отсутствие вызова сохранения. Отдельная интеграционная проверка изучает адаптер чтения и запись в целевой среде.

Когда нужен TEST-SEAM#

TEST-SEAM ... END-TEST-SEAM обозначает участок, код которого можно заменить через TEST-INJECTION во время теста. Это помогает постепенно тестировать существующий код, который пока нельзя безопасно переработать. SAP документирует ограничения: injection должна находиться в подходящей области компиляции; например, seam и injection ограничены одним function pool, а reports этот механизм не поддерживают.

Seam может быть временным переходным швом. Если зависимость стала частью контракта класса, явный интерфейс обычно легче найти и сопровождать. Не оборачивайте большой метод в seam только ради покрытия: так можно скрыть реальное поведение вместо его проверки.

Зависимости от function module#

SAP описывает отдельную инфраструктуру test double для function modules и указывает её доступность начиная с SAP NetWeaver AS ABAP 7.56. В более ранней системе может потребоваться интерфейс, seam или другой совместимый механизм. Не предполагайте, что средство доступно во всех версиях.

План проверки финансового правила#

  1. Зафиксировать уровень детализации операции и входной контракт: валюту, период, ключи, точность и поведение при пропуске данных.
  2. Проверить расчёт на обычном, нулевом и отрицательном значениях, а также при конфликтующих ключах.
  3. Изолировать время, курсы, чтение данных и вызовы платформы там, где они влияют на результат или создают побочный эффект.
  4. Проверить, что двойник использует публичный контракт и не зависит от приватных деталей реализации.
  5. Запустить ABAP Unit и нужные интеграционные проверки в целевой системе и сохранить фактический отчёт.

Пункты 1-4 являются рекомендацией к проектированию. Пятый пункт здесь не выполнен: у проекта нет подключённой ABAP-системы, поэтому страница не заявляет о компиляции, ABAP Unit, ATC или runtime-проверке.

Область действия источников#

SAP Help описывает отдельные механизмы ABAP Unit и версии их доступности. Это не подтверждает, что пример выше реализован в SAP, подходит любой версии или прошёл запуск. Ссылки сохранены как метаданные; локальные текстовые снимки источников не получены.

Источники и документация

  1. ABAP OO Test Double Framework ↗
  2. Managing Other Dependencies with ABAP Unit ↗
  3. Managing Dependencies on ABAP Function Modules with ABAP Unit ↗

Источники нужны для самостоятельной проверки. Примеры и интерпретации на сайте могут быть учебными упрощениями.