ABAP Unit 시작하기: 테스트 클래스, 테스트 더블, 테스트 심
3줄 요약
ABAP Unit 테스트는 로컬 테스트 클래스(
FOR TESTING)의 테스트 메서드로 만들고,given-when-then으로 쓰고CL_ABAP_UNIT_ASSERT로 검증해요.DB 접근처럼 외부에 기대는 부분(DOC)은 인터페이스로 분리해 테스트 더블로 바꾸고, 생성자·세터·파라미터·뒷문(friend) 주입 중 하나로 넣어요.
인터페이스를 만들 수 없는 레거시 코드는
TEST-SEAM/TEST-INJECTION으로 임시 우회할 수 있고, 프레임워크(CL_ABAP_TESTDOUBLE등)도 있어요.
어떤 상황에서 쓰나요
"테스트를 짜 보고 싶은데 어디서부터 시작하지?"라는 사람을 위한 입문 요약이에요. Clean ABAP 연재 12, 13회가 테스트 설계 원칙이었다면 이 글은 치트시트의 *ABAP Unit Tests* 편을 따라 문법 뼈대와 도구를 정리해요.
핵심 내용
ABAP Unit. ABAP 런타임에 통합된 테스트 도구로, 개별 테스트와 대량 테스트를 실행하고 결과를 평가해요. 개별 단위 테스트는 로컬 테스트 클래스의 테스트 메서드로 구현해요.
큰 흐름 (치트시트의 순서)
운영 코드에서 외부에 기대는 컴포넌트(DOC, dependent-on component)를 찾고 테스트할 수 있게 준비해요. 호출하는 다른 클래스나 DB 접근이 대표적이에요.
테스트 더블을 만들거나 구현해요.
테스트 더블을 주입해요.
테스트 클래스와 메서드를 만들어요.
테스트를 실행해요.
테스트 클래스 뼈대
CLASS ltc_test_class DEFINITION
FOR TESTING
RISK LEVEL HARMLESS
DURATION SHORT.
PRIVATE SECTION.
DATA ref_cut TYPE REF TO cl_class_under_test.
METHODS some_test_method FOR TESTING.
ENDCLASS.테스트 클래스는 클래스 풀의 테스트 인클루드(ADT 의 *Test Classes* 탭)에 만들고, 운영 시스템에서는 생성되지 않아요.
RISK LEVEL:HARMLESS(시스템 설정과 영속 데이터를 바꾸지 않음),DANGEROUS(영속 데이터를 바꿈),CRITICAL(시스템 설정이나 커스터마이징을 바꿈, 기본값).DURATION:SHORT,MEDIUM,LONG.ADT 에서는 탭에
test를 입력하고 Ctrl+Space 로 템플릿(testClass)을 쓸 수 있어요.보호/비공개 메서드를 테스트하려면
LOCAL FRIENDS로 친구 관계를 선언해야 해요.테스트 메서드는 매개변수가 없고 호출 순서가 정해져 있지 않으며, 비공개나 보호 영역에 둬요.
특수 메서드:
setup(각 테스트 전),teardown(각 테스트 후), 정적class_setup/class_teardown(클래스 전체 전후 한 번).
검증: `CL_ABAP_UNIT_ASSERT` — assert_equals, assert_bound/assert_not_bound, assert_initial/assert_not_initial, assert_subrc, assert_true/assert_false, assert_differs, assert_number_between, assert_table_contains, assert_char_cp, assert_that(제약), fail, skip 등이에요. 흔한 매개변수는 act(검증 대상), exp(기대값), msg(오류 설명), quit(오류 때 테스트 흐름 제어)예요.
테스트 더블 만들기
DOC 에 인터페이스가 있으면 로컬 테스트 더블에서 인터페이스 메서드만 구현해요.
PARTIALLY IMPLEMENTED추가 구문은 테스트 클래스의 인터페이스 구현에서만 가능하고 일부 메서드만 구현해도 돼요.인터페이스가 없으면 로컬 인터페이스를 만들고 운영 코드를 맞춰 고쳐요.
DOC 가
FINAL이 아닌 클래스의 메서드라면 상속해서 필요한 메서드를 재정의할 수 있어요(Clean ABAP 연재 12회는 이 방식을 피하라고 했어요).
주입 방식: 생성자 주입, 세터 주입, 파라미터 주입(테스트 대상 메서드의 선택 입력), 뒷문 주입(테스트 클래스에 friend 를 허용해 내부 속성에 직접 넣기).
테스트 심. 운영 코드의 일부를 테스트 때만 바꿔 끼우는 방법이에요. 권한 검사, DB 읽기·변경처럼 테스트가 막히는 곳에 쓸 수 있어요. 테스트가 아닐 때는 원래 코드가 그대로 실행돼요.
" 운영 코드
TEST-SEAM select_from_db.
SELECT * FROM dbtab INTO TABLE @some_table.
END-TEST-SEAM.
" 테스트 클래스
TEST-INJECTION select_from_db.
some_table = VALUE #( ( ... ) ( ... ) ).
END-TEST-INJECTION.프레임워크 (선택 목록이며 전부가 아님)
클래스와 인터페이스: ABAP OO 테스트 더블 프레임워크(
CL_ABAP_TESTDOUBLE).FINAL,FOR TESTING,CREATE PRIVATE, 필수 매개변수가 있는 생성자, 로컬 클래스와 인터페이스는 지원하지 않아요.DB: CDS 테스트 더블(
CL_CDS_TEST_ENVIRONMENT), ABAP SQL 테스트 더블(CL_OSQL_TEST_ENVIRONMENT)RAP BO: 트랜잭션 버퍼 더블(
CL_BOTD_TXBUFDBL_BO_TEST_ENV), EML API 모킹(CL_BOTD_MOCKEMLAPI_BO_TEST_ENV)
실행. ADT 에서 클래스 안에서 Ctrl+Shift+F10 으로 클래스의 테스트를 모두 실행하고, 결과는 *ABAP Unit* 탭의 *Failure Trace* 에서 봐요. 커버리지는 Ctrl+Shift+F11 이고 *ABAP Coverage* 탭에서 어느 코드가 테스트됐는지 볼 수 있어요.
주의할 점
테스트 심은 편하지만 침습적이라 오래 쓰면 유지가 어려워요. Clean ABAP 연재 12회도 임시 우회책으로만 쓰라고 해요. 치트시트도 테스트 가능한 설계가 먼저라고 안내해요(이 문장은 두 자료를 합친 제 정리예요).
CL_ABAP_TESTDOUBLE의 지원 제한(FINAL,CREATE PRIVATE등)은 위 목록을 꼭 확인하세요. 클래스를FINAL로 막으면 이 프레임워크로 만들 수 없어요.키 단축키(Ctrl+Shift+F10 등)는 ADT 기준이고 macOS 에서는 Cmd 예요.
치트시트는 계속 갱신되는 문서예요. 이 편의 첫 공개는 2023년 2월이고, 제가 읽은 판은 2026년 10월 기준이에요. 이 글은 읽고 정리한 것이고 예제를 직접 실행해 보지는 않았어요.
원문 주소: https://github.com/SAP-samples/abap-cheat-sheets/blob/main/14_ABAP_Unit_Tests.md
출처와 이용 안내
원문: ABAP Cheat Sheets - ABAP Unit Tests · 작성자 SAP SE and contributors SAP-samples · 작성일 2023-02-20 · 기준 릴리스에 따라 다름 원문은 최신 ABAP 기준 · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 Apache-2.0 라이선스(https://www.apache.org/licenses/LICENSE-2.0)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기