ABAP Unit Test 안 하면 버그 못 잡습니다? — cl_abap_unit_assert 실전 #shorts #SAP #ABAP

Moderator · 조회 3

ABAP Unit Test란?

ABAP Unit Test는 ABAP 코드의 개별 단위(메서드, 함수)를 자동으로 검증하는 테스트 프레임워크입니다. 수동 테스트 대신 코드로 테스트를 작성해 버그를 배포 전에 잡을 수 있습니다.

테스트 클래스 구조

테스트 클래스는 FOR TESTING ADDITION 키워드와 함께 선언합니다. 테스트 메서드에도 FOR TESTING을 붙입니다.

CLASS lcl_order_test DEFINITION FOR TESTING.
  PUBLIC SECTION.
    METHODS setup.
    METHODS teardown.
    METHODS test_total FOR TESTING.
ENDCLASS.

CLASS lcl_order_test IMPLEMENTATION.
  METHOD setup.
    " 테스트 전 초기화
  ENDMETHOD.
  METHOD teardown.
    " 테스트 후 정리
  ENDMETHOD.
  METHOD test_total.
    DATA(result) = lcl_order=>calculate_total( 5 ).
    cl_abap_unit_assert=>assert_equals(
      act = result  exp = 100 ).
  ENDMETHOD.
ENDCLASS.

cl_abap_unit_assert 활용

ABAP 표준 클래스 cl_abap_unit_assert는 다양한 Assertion 메서드를 제공합니다.

" 값 비교
cl_abap_unit_assert=>assert_equals(
  act = result  exp = 100 ).

" NOT INITIAL 체크
cl_abap_unit_assert=>assert_not_initial(
  act = lv_result ).

" 바운드 체크
cl_abap_unit_assert=>assert_bound(
  act = lo_object ).

" 강제 실패
cl_abap_unit_assert=>fail(
  msg = '예외 미발생 오류' ).

Test Double Framework

Test Double Framework를 사용하면 인터페이스 기반의 Mock 객체를 생성해 실제 데이터베이스 없이 단위 테스트가 가능합니다.

" Test Double 생성
DATA(lo_double) = CAST if_order_repo(
  cl_abap_testdouble=>create( 'if_order_repo' ) ).

" 메서드 동작 설정
cl_abap_testdouble=>configure_call(
  lo_double )->returning( lv_mock_value ).
lo_double->get_order( iv_id = 1 ).

핵심 한 줄

테스트 코드가 곧 문서입니다.