Test

Jiny's 개발 일기·2023년 8월 9일
0

Article

목록 보기
6/9

Introduction

왜 테스트를 해야할까?

모두 경험담이다...

1. 코드의 작동 방식을 이해

  • 내가 쓴 코드를 작성할 때 내가 쓴 코드는 이해하기 쉽고 간단해서 테스트 코드를 작성하지 않아도 될 것만 같지만 결국 내가 쓴 코드는 나만 간단하다.
  • 남이 쓴 코드를 이해한다는 것은 코드를 처음부터 작성하는 것보다 어쩌면 복잡한 일일 수 있다.
  • 내가 어떤 코드를 작성해야 하는지 정확히 인지

2. 코드를 수정할 때 예상치 못한 부작용 방지

  • 하나의 서비스를 수정하고자 할 때 모든 비즈니스 로직을 이해하고 수정하는 것이 아닐 수도 있다. 이러다 보면 예상치 못한 결과값을 도출하게 될 수도 있다.

종류

  • Unit Test(단위 테스트): 개별적인 코드 단위(함수, 메서드)의 의도를 확인하는 과정
    • Junit에서 흔히 테스트 하는 것들은 단위 테스트에 해당됨
  • Integration Test(통합 테스트): 모듈 간의 상호작용을 테스트
    • MSA라면 WAS, DBMS, Message Broker 등이 모듈이 될 수 있음
    • Test Container, H2 등으로 실제 쿼리를 날려 보는 것은 통합 테스트에 해당 됨

용어

  • Mock: 가짜 객체. Stubbing을 통해 행동을 정의 할 수 있음
  • Spy: 일부가 Mock 객체로 이루어져 있으며 어떻게 호출되었는지에 따라 일부 정보를 기록하는 Stub
    • 메서드 호출 여부, 메서드 호출 횟수 등
  • Stub: 테스트 중에 만들어진 호출에 미리 준비된 답변을 제공하고 일반적으로 테스트를 위해 프로그래밍된 것 외에는 전혀 응답하지 않습니다.
    • Mockito에서 Mock 객체의 함수를 정의(Stubbing)하지 않으면 실행하지 못함
  • Dummy: 매개변수를 채우는 등의 실제 사용되지 않는 객체
  • Fake: H2처럼 프로덕션 보다는 가벼운 방식의 테스트(실제 동작은 함)

잘 이해가 안되는데 Mock만 행동 검증을 하고 나머지는 상태 검증을 위해 사용한다.

상태 검증: 객체가 코드를 수행 했을 때 결과적으로 어떤 상태에 도달하느냐에 관한 검증

행동 검증: 객체가 코드를 수행 했을 때 정상적으로 모든 행동을 수행하느냐에 관한 검증

실습

실습은 Junit과 Kotest 2가지 방식으로 진행해 보았다.

profile
옛날 블로그 주소 : https://jeongjin984.github.io/

1개의 댓글

comment-user-thumbnail
2023년 8월 9일

감사합니다. 이런 정보를 나눠주셔서 좋아요.

답글 달기