테스트 없으면 큰일 — ABAP Unit Test #shorts #SAP #ABAP

Moderator

이 글이 답하는 질문

  • ABAP에서 Unit Test는 어떻게 작성하나?
  • CL_ABAP_UNIT_ASSERT의 핵심 메서드는?
  • TDD 사이클을 ABAP에 적용하는 방법은?

직접 해보기

1. 테스트 클래스 선언

CLASS lcl_calc_test DEFINITION
  FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
  PRIVATE SECTION.
    METHODS:
      test_add   FOR TESTING,
      test_init  FOR TESTING.
ENDCLASS.

FOR TESTING 키워드를 붙이면 ABAP Unit 프레임워크가 테스트 클래스로 인식합니다. 실제 프로덕션 코드에 포함되지 않도록 separate include에 두는 게 일반적입니다.

2. CL_ABAP_UNIT_ASSERT 활용

CLASS lcl_calc_test IMPLEMENTATION.
  METHOD test_add.
    DATA: lo_calc TYPE REF TO zcl_calc.
    CREATE OBJECT lo_calc.
    cl_abap_unit_assert=>assert_equals(
      act = lo_calc->add( iv_a = 2 iv_b = 2 )
      exp = 4
      msg = 'add(2,2) should return 4'
    ).
  ENDMETHOD.

  METHOD test_init.
    DATA: lo_calc TYPE REF TO zcl_calc.
    CREATE OBJECT lo_calc.
    cl_abap_unit_assert=>assert_initial(
      act = lo_calc->result
      msg = 'initial result must be 0'
    ).
  ENDMETHOD.
ENDCLASS.

3. 자주 쓰는 ASSERT 메서드

" 값 동일 여부
cl_abap_unit_assert=>assert_equals( act = lv_result  exp = 10 ).

" 초기값(SPACE/0/INITIAL) 확인
cl_abap_unit_assert=>assert_initial( act = lv_result ).

" 참조 바인딩 확인
cl_abap_unit_assert=>assert_bound( act = lo_ref ).

" 조건 TRUE 검증
cl_abap_unit_assert=>assert_true(
  act = xsdbool( lv_flag = abap_true ) ).

삽질 노트

  • RISK LEVEL을 CRITICAL로 설정하면 DB 변경이 허용되지만 롤백이 보장되지 않음 — HARMLESS + 테스트용 데이터 사용 권장
  • assert_equals에서 act/exp 타입 불일치 시 변환 예외 발생 — 타입 캐스팅 명시 필요
  • ADT(Eclipse)에서 Ctrl+Shift+F10으로 단독 실행, SE80에서는 메뉴 → Test → ABAP Unit Test

핵심 한 줄

CL_ABAP_UNIT_ASSERT 한 줄이 수백 줄 디버깅 시간을 아껴준다 — 테스트 없는 ABAP 코드는 시한폭탄.

더 파볼 주제

  • ABAP Test Double Framework — 의존 클래스 Mocking
  • CL_OSQL_TEST_ENVIRONMENT — DB 레이어 테스트 격리
  • TDD Cycle: Red → Green → Refactor in ABAP