본문 바로가기

Spring/Test

Edge 케이스를 고려한 단위 테스트

다양한 Edge 케이스 고려해 보기

입력 가능한 모든 케이스를 고려해 보기

 

Edge 케이스 발견 후 처리방법

Edge 케이스에 대해 개발자가 독단적으로 방향을 결정하는 것보다는, 관련 담당자(들)과 협의 진행 후 결정합니다.

  • 관련 담당자: 관련 개발팀, 기획자, 디자이너, QA
  • 예를들면,
    • 에러 발생으로 결정
      • 정확한 에러문구 필요 (문구의 통일성, 글로벌 서비스의 경우 번역 고려)
      • 부적절한 문구의 예: "헐.. 빈 문자열을 입력하시면 레알 멘붕!!"
    • 빈 문자열 허용
      • DB 에는 빈 문자열 ("")
      • UI 에 표시할 때는 "알 수 없음" 으로 표시 → 프론트엔드 개발 필요
    • 빈 이미지 허용
      • UI 에 대체 이미지 표시 → 디자이너, 프론트엔드 개발 작업이 필요

Edge 케이스를 고려한 코드 수정

  1. Edge 케이스 처리 코드 구현
    • 관련팀과 논의한 결과를 바탕으로!
  2. 테스트, 리팩토링, 테스트

테스트 코드 결과 확인

 

 

 

 

 

블랙박스 테스팅이란 소프트웨어 내부 구조나 동작원리를 모르는 블랙박스와 같은 상태에서, 즉 웹 서비스의 사용자 입장에서 동작을 검사하는 방법입니다!

 

  1. 블랙 박스 테스팅
    1. 장점
      • 누구나 테스트 가능 - 개발자부터 디자이너, 베타 테스터 혹은 사장님까지!
    2. 단점
      • 기능이 증가될 수록 테스트의 범위가 증가
        • 시간이 갈 수 록 테스트하는 사람이 계속 늘어나야함
      • 테스트 하는 사람에 따라 테스트 퀄러티가 다를 수 있음 → QA 직군이 있는 이유

 

  1. 장점
    • 누구나 테스트 가능 - 개발자부터 디자이너, 베타 테스터 혹은 사장님까지!
  2. 단점
    • 기능이 증가될 수록 테스트의 범위가 증가
      • 시간이 갈 수 록 테스트하는 사람이 계속 늘어나야함
    • 테스트 하는 사람에 따라 테스트 퀄러티가 다를 수 있음 → QA 직군이 있는 이유

 

개발자가 직접 "본인이 작성한 코드"를 검증하기 위해 "테스트 코드"를 작성 "개발자 본인이 작성한 코드는 본인이 가장 잘 안다."

  1. 장점
    • 빠르고 정확한 테스트 가능 (예상 동작 VS 실제 동작)
    • 테스트 자동화 가능
      • 배포 절차 시 테스트 코드가 수행되어 동작 검증
    • 리팩토링 후 기존 동작에 대한 보증수표!!!
  2. 단점
    • 개발 시간이 오래 걸림
    • 테스트 코드를 유지보수하는 비용

 

  1. 개발자 테스트
    1. UI 테스팅
      • 장점: 실제 서비스를 사용하게 될 고객의 입장에서 기능을 검증해 볼 수 있음
      • 단점: 클라이언트 코드 (HTML, CSS, JS) 가 다 작성 되어야만 기능 검증이 가능함
        • 프론트 개발과 백엔드 개발이 동시에 진행되고 있다면??
    2. API 호출앱 사용 (ex. Advanced REST Client, Postman)
      • 장점: UI 없이 서버의 API 를 손쉽게 검증 가능
      • 단점: 여러개의 API 를 한번에 검증하기 어려움
    3. 스프링의 테스트 프레임워크 사용
      • 장점
        • UI 없이 서버의 API 를 손쉽게 검증 가능
        • 여러개의 API 를 한번에 검증 가능
        • 테스트 코드를 소스 코드와 함께 관리 가능
        • 코드 수정 후 바로 테스트 가능
        • Git 을 이용해 다른 개발자들과 테스트 코드 공유 가능
      • 단점
        • 테스트 프레임워크에 대한 추가학습이 필요
        • 테스트 코드 작성에 다소 시간이 소요

 

 

JUnit 을 이용한 단위 테스트

 

  • 단위 테스트란?
  • 프로그램을 작은 단위로 쪼개서 각 단위가 정확하게 동작하는지 검사하고 이를 통해 문제 발생 시 정확하게 어느 부분이 잘못되었는지를 재빨리 확인할 수 있게 해준다.

 

  1. Development: 개발
  2. Unit Tests (단위 테스트): 개발자 테스트
  3. QA Testing:
    • 블랙박스 테스팅
    • 주로 QA 팀이 Production 환경과 유사한 환경(Stage)에서 테스팅
  4. Production: 실 서비스 운영 환경

JUnit 사용 설정

JUnit이란 자바 프로그래밍 언어용 단위 테스트 프레임워크입니다.

build.gradle 파일을 열어보면 JUnit 사용을 위한 환경설정이 이미 되어있습니다

dependencies {
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

테스트 파일 생성