ABAP Unit 시작하기: 테스트 클래스, 테스트 더블, 테스트 심
3줄 요약
FOR TESTING 클래스와 메서드로 테스트를 만들고 CL_ABAP_UNIT_ASSERT로 결과를 검증해요.
DB나 다른 클래스 같은 외부 의존성은 테스트 더블로 대체할 수 있어요.
대체 객체를 전달하는 방법과 TEST-SEAM 등 여러 도구가 있어요. 기존 코드 구조와 지원 환경에 맞춰 선택하세요.
어떤 상황에서 쓰나요
ABAP Unit을 처음 쓰는 분을 위한 글이에요. 테스트 클래스와 메서드를 만드는 기본 문법부터 결과를 검증하는 방법까지 살펴봐요. DB나 다른 클래스에 의존하는 코드를 테스트할 때 사용하는 테스트 더블과 TEST-SEAM도 알아볼게요.
단위 테스트는 작은 동작에 입력을 주고 기대한 결과가 나오는지 자동으로 확인합니다. 아래 그림의 테스트들은 각각 독립적으로 실행되며, 다른 테스트의 실행 결과에 의존하지 않습니다.
핵심 내용
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회는 이 방식을 피하라고 했어요).
주입 방식: 생성자 주입, 세터 주입, 파라미터 주입(테스트 대상 메서드의 선택 입력), FRIENDS를 통한 주입(테스트 클래스에 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
아직 댓글이 없어요.
로그인하고 댓글 쓰기