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

정보·팁

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

에이든ABAP 개발자운영자모듈 MMSD기타조회 2

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

아직 댓글이 없어요.

정보·팁 목록전체 목록