Clean ABAP ⑬ 테스트 작성: 이름, given-when-then, 단언 고르기
3줄 요약
테스트 메서드 이름은 "주어진 상황과 기대 결과"를, 본문은 given-when-then 으로, "when" 은 호출 하나만 써요.
테스트 데이터는 의미 없는 값임이 티 나게, 차이가 한눈에 보이게 만들어요.
단언은 적고 초점이 있게, 가장 알맞은 종류로 쓰고, 개수 대신 내용을 검증해요.
어떤 상황에서 쓰나요
지난 회가 테스트 구조였다면 이번 회는 테스트 한 건 한 건을 어떻게 쓸지예요. 실패했을 때 로그만 보고 무엇이 문제인지 알 수 있는 테스트를 쓰고 싶을 때 도움이 돼요.
핵심 내용
테스트 메서드
이름은 given 과 then 을 비춰요:
reads_existing_entry,throws_on_invalid_key,detects_invalid_input.test_loop,parameterized_test,get_attributes_wo_w처럼 무엇을 기대하는지 알 수 없는 이름은 나빠요. 이름 길이는 30자까지라 짧아서 뜻이 안 전달되면 ABAP Doc 이나 첫 줄 주석으로 설명을 덧붙여도 돼요. 이름이 너무 긴 테스트 메서드가 많아졌다면 테스트 클래스를 쪼개고 클래스 이름에 상황 차이를 담으라는 신호예요.given-when-then 으로 구성해요. 준비(given), 대상 호출(when), 결과 검증(then)을 순서대로 쓰고, 구간이 길어 구분이 안 되면 하위 메서드로 빼요. 빈 줄이나 주석 구분선은 눈에 띄는 어수선함을 줄이지는 못해도 읽는 사람과 초보 작성자에게는 도움이 돼요.
"when" 은 대상 클래스 호출 정확히 하나만 써요. 여러 번 부르면 어느 호출이 실패를 냈는지 찾기 어렵고 무엇을 테스트하는지도 흐려져요.
정말 필요하지 않다면
teardown을 만들지 않아요. 보통 통합 테스트에서 DB 항목이나 외부 자원을 정리할 때만 필요하고,cut이나 테스트 더블은 다음 테스트 전에setup이 덮어써요.
테스트 데이터
의미 없는 값은 의미 없다는 티가 나게 만들어요:
'42'같은 널리 알려진 의미 없는 숫자,'?=/"&'같은 "키보드 사고",some_random_number같은 변수 이름. 실제로 존재하는 알림 ID 나 실제 커스터마이징 값처럼 보이게 만들어서 실제 객체와 연결된 것처럼 착각하게 하지 않아요.긴 무의미 문자열 둘의 차이를 눈으로 비교하게 만들지 않아요(끝에
END1,END2만 다른 150자 문자열).테스트 데이터의 목적을 상수 이름으로 말해요.
some_nonsense_key같은 이름이면 테스트가 "잘못된 키로 호출하면 예외"를 말하는 것이 읽혀요.
단언
단언은 이 테스트가 다루는 것만, 적은 수로 해요. 많이 단언하면 초점이 없고, 기능 하나를 고칠 때 관련 없는 테스트까지 고쳐야 해요.
알맞은 단언 종류를 써요.
assert_equals( act = table exp = test_data )는 타입 일치까지 보고 차이를 자세히 알려 줘요.assert_true( xsdbool( act = exp ) )는 실패해도 디버거를 열어야 원인을 알아요.개수 대신 내용을 단언해요.
lines( log_messages ) = 3은 개수가 맞아도 내용이 엉뚱할 수 있어요. 기대하는 내용 그대로를assert_contains_exactly같은 단언으로 표현해요.내용이 아니라 성질이 중요하면 성질을 단언해요(
assert_all_lines_shorter_than). 정확한 내용을 단언하면 리팩터링으로 다르지만 올바른 결과가 나와도 테스트가 깨져요.예상한 예외는
fail( )로 확인해요.
METHOD throws_on_empty_input.
TRY.
cut->do_something( '' ).
cl_abap_unit_assert=>fail( ).
CATCH /clean/some_exception.
ENDTRY.
ENDMETHOD.예상하지 않은 예외는 잡아서
fail하지 말고 테스트 메서드의RAISING으로 넘겨요. 테스트가 정상 흐름에 집중해서 읽기 쉬워요.반복되는 검증은 직접 만든 단언 메서드로 묶어요(
assert_contains).
주의할 점
이 장의 단언 메서드 이름 중
assert_contains_exactly,assert_all_lines_shorter_than등은 원문 예시에 나오는 이름이고, 모든 릴리스의cl_abap_unit_assert에 있는지는 확인하지 못했어요. 쓰기 전에 대상 시스템의 클래스 메서드 목록을 확인하세요."given 이름" 규칙은 팀에서 쓰는 테스트 명명 규칙(BDD 스타일 등)과 다를 수 있어요. 가이드는 의견이니 팀 합의를 따르세요.
원문은 2019년 첫 공개, 2025년 3월 마지막 수정본이에요. 이 글은 읽고 정리한 것이고 예제를 직접 돌려 보지는 않았어요.
원문 주소: https://github.com/SAP/styleguides/blob/main/clean-abap/CleanABAP.md#test-methods
출처와 이용 안내
원문: Clean ABAP - Testing: Test Methods, Test Data, Assertions · 작성자 SAP SE and contributors SAP/styleguides · 작성일 2019-05-01 · 기준 릴리스 무관 ABAP Unit · 확인일 2026-10-25
이 글은 위 원문을 읽고 한국어로 요약·재구성한 글이며 번역본이 아니에요. 원문의 저작권은 작성자와 SAP에 있어요.
원문은 CC BY 3.0 라이선스(https://creativecommons.org/licenses/by/3.0/)로 공개된 자료예요. 이 글은 내용을 한국어로 줄이고 순서를 바꾼 변경본이며, 원저작자가 이 글을 보증하지 않아요.
설정과 화면은 릴리스마다 달라요. 적용하기 전에 원문과 SAP Help Portal, 관련 SAP Note에서 최신 내용을 확인해 주세요.
SAP와 SAP 제품명은 SAP SE의 상표예요. 바로투입은 SAP와 관련이 없어요.
댓글 0
아직 댓글이 없어요.
로그인하고 댓글 쓰기