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가지 방식으로 진행해 보았다.
감사합니다. 이런 정보를 나눠주셔서 좋아요.