[Spring] 단위 테스트

zini9188·2023년 3월 3일
0

Spring

목록 보기
29/33

단위 테스트란

기능 테스트

주로 애플리케이션을 사용하는 사용자 입장에서 애플리케이션이 제공하는 기능이 올바르게 동작하는지를 테스트한다.

통합 테스트

애플리케이션의 여러 계층이 연관되어 독립적인 테스트가 가능하다고 보기 힘들기에 단위 테스트라고 하기에는 범위가 넓다.

슬라이스 테스트

개발자가 각 계층에 구현해 놓은 기능들이 잘 동작하는지 확인하기 위해 애플리케이션을 특정 계층으로 쪼개어서 하는 테스트를 의미한다.

Mock 객체를 사용해서 계층별로 끊어서 테스트 할 수 있기 때문에 어느 정도 테스트 범위를 좁힐 수 있지만, 단위 테스트라고 부르기에는 크기가 크며 애플리케이션의 일부만 테스트하기 때문에 부분 통합 테스트라고 부르기도 한다.

단위 테스트

핵심 로직인 비즈니스 로직에서 사용하는 클래스들이 독립적으로 테스트하기에 좋아 단위 테스트라고 부르는 경우가 가장 많다.

단위 테스트 코드는 메서드 단위로 대부분 작성된다. 만약 DB의 상태가 테스트 전후와 동일하다면 DB를 연동하더라도 단위 테스트에 포함될 수 있다.

단위 테스트를 하는 이유

  • 테스트를 하기 위해 Postman을 이용해 HTTP 요청을 보내고 디버깅을 해야 하는 번거로움이 사라진다.

  • 작은 단위의 테스트로 미리 버그를 찾을 수 있어, 애플리케이션을 완성했을 때의 버그를 줄일 수 있다.

F.I.R.S.T 원칙

Fast (빠르게)

작성한 테스트 케이스는 빨라야 한다.

Independent (독립적으로)

각각의 테스트 케이스는 독립적이어야 한다.

어떠한 테스트 케이스를 실행시키더라도 순서와 상관없이 정상적인 실행을 보장해야 한다.

Repeatable (반복 가능하도록)

테스트 케이스는 어떤 환경에서도 반복해서 실행 가능해야 한다.

외부 서비스나 외부 리소스가 연동되는 경우 동일 테스트 결과를 보장하지 못하기에, 단위 테스트를 진행할 때는 연동을 끊어주는 것이 바람직하다.

Self - validating (자가 검증)

단위 테스트는 성공 또는 실패라는 자체 검증 결과를 보여주어야 한다.

Timely (시기 적절하게)

단위 테스트는 테스트 하려는 기능 구현을 하기 직전에 작성해야 한다.

구현하고자 하는 기능을 단계적으로 조금씩 업그레이드하면서 테스트 케이스도 단계적으로 업그레이드 하는 것이 낫다.

Given - When - Then

테스트 케이스의 가독성을 높이기 위해 given - when - then 표현 방식을 사용하는 것이 유용하다.

Given

  • 테스트를 위한 준비 과정을 명시

  • 테스트에 필요한 전제 조건들이 포함

  • 테스트 대상에 전달되는 입력 값 역시 포함

When

  • 테스트할 동작(대상)을 지정

  • 단위 테스트에서는 일반적으로 메서드 호출을 통해 테스트를 진행하므로 한 두줄 정도로 작성이 끝나는 부분

Then

  • 테스트의 결과를 검증하는 영역

  • 예상하는 값(expected)과 테스트 대상 메서드의 동작 수행 결과(actual)값을 비교하여 기대한대로 동작을 수행하는지 검증(Assertion)하는 코드들이 포함

Assertion

테스트의 결과를 검증하는데에 사용하며, 테스트 케이스의 결과가 반드시 참이어야 한다는 것을 논리적으로 표현한 것

profile
백엔드를 지망하는 개발자

0개의 댓글