바로투입이력카드
SAP 게시판

정보·팁

Clean ABAP ⑬ 테스트 작성: 이름, given-when-then, 단언 고르기

에이든ABAP 개발자운영자모듈 MMSD기타수정됨조회 13

3줄 요약

  • 테스트 이름에는 준비한 상황과 기대 결과를 담고, 본문은 준비·호출·검증 순서로 작성해요.

  • 테스트 데이터는 목적이 드러나고 서로의 차이를 쉽게 확인할 수 있도록 만들어요.

  • 단언은 검증할 동작에 집중해요. 단순한 개수보다 내용이나 필요한 속성을 확인하세요.

어떤 상황에서 쓰나요

테스트가 실패했을 때 이름과 로그만 보고도 어떤 동작이 잘못됐는지 알 수 있어야 해요. 이번 글에서는 테스트를 준비·호출·검증 순서로 작성하고, 목적에 맞는 데이터와 단언을 고르는 방법을 알아봐요.

테스트는 상황을 준비하고, 대상 동작을 한 번 호출한 뒤, 실제 결과를 기대 결과와 비교하는 순서로 작성합니다. 아래 세 칸을 기준으로 본문을 나누면 실패 원인을 찾기도 쉬워집니다.

AI 설명 그림: 테스트는 준비, 호출, 검증 순서로. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.
AI 설명 그림: 테스트는 준비, 호출, 검증 순서로. 개념을 돕기 위한 이미지이며 실제 SAP 화면이 아닙니다.

핵심 내용

테스트 메서드

  • 이름에는 준비한 상황(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

아직 댓글이 없어요.

정보·팁 목록전체 목록