테스트 없으면 큰일 — 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