본문 바로가기
Spring/junit5 테스트

junit 테스트 코드(1/5) - 개념 및 용어

by 옹알이옹 2023. 7. 30.
테스트 코드를 제대로 작성해 본 적 없어, 이번 기회에 개념부터 공부를 하며 한 것들을 정리해 보았다.

 


 1. 테스트 코드란

말 그대로 개발자가 개발한 코드에 대해 검증을 하기 위해 작성하는 코드로 자바에서는 junit이라는 테스트 코드 작성을 위한 프레임워크를 사용한다.

 2. Unit 테스트(단위 테스트) 코드 기본 원칙

F - fast : 테스트 코드는 빠르게 실행되어야 한다.

I - Independent : 독립적으로 실행되어야 한다.

R - Repeatable : 반복 가능해야 한다.

S - Self Validating : 스스로 테스트 검증 가능해야 한다

T - Timely : 프로덕션 코드 직전에 작성되어야 한다.(TDD)


 3. 왜 테스트 코드를 작성하나

우선 가장 기본적인 이유로는 다음이 있다.

  • 코드의 안정성을 높여준다
  • 수정 및 추가를 하며 나오는 부작용에 대처하기 좋아진다.
    => 의존 관계가 많거나 복잡한 곳에서 발생한 에러는 대처하기 정말 화난다. 
  • 에러를 잡기 훨씬 수월해진다. => 단위 테스트를 진행하면 세밀하게 문제를 잡기 정말 수월하다.
  • 협업 간에 코드에 대한 신뢰도가 좋아진다

⭕ 다음은 실제 작성을 하며 추가로 느낀 것들

  • Spring에 대해 공부가 많이 되었다. => 테스트 코드 작성을 하기 위해서 꽤나 많은 Spring 지식이 필요했다.
  • 테스트 코드를 작성하고 결과를 도출하는 것들이 수학의 '증명'과 비슷해 보였다.
    하지만 결국 테스트 코드의 증명이란 건 대부분 값이 있거나, 같거나, 예외가 발생하거나 등등의 경우가 한정적이다.
  • 객체지향의 원칙을 잘 지킨고 결합도가 낮은 코드가 테스트 코드를 작성하기도 훨씬 수월하다.
  • 테스트 코드 작성은 '권장'보다는 '필수'에 가깝게 느껴졌다.

 4. 어떤 식으로 진행하는가

보통 Spring에서 테스트 코드를 작성한다고 하면 단위 테스트통합 테스트를 진행한다.

단위 테스트

✅ 단위 테스트는 각각의 레이어 별로(Controller, Service, Repository) 테스트를 진행하기 때문에 단위 테스트라 한다.

  • 각각의 계층들이 의존성을 가지면 안 된다.
  • 의존성을 없애기 위해 Mock 객체를 사용한다. (자세한 건 추후 설명)
  • 컨트롤러 계층은 작성은 복잡한 상황이 아니라면 따로 작성하지 않아도 된다.
  • 스프링 컨테이너의 도움을 받지 않는다.
    • 부분적인 테스트를 진행하는데 모든 빈이 스프링에 등록되어 버림
    • 위의 이유로 테스트 자체의 속도 저하기 심해짐
    • 의존성을 가지면 안 되는데 의존 주입을 받을 이유는 더더욱 없음

⭕ 컨트롤러 계층은 따로 포스팅하지 않을거기 때문에 해당 글에서 서술

  • 컨트롤러 계층은 요청과 응답, 서비스 계층 호출에 대한 검증을 한다.
  • 해당 역할은 통합 테스트를 진행할 때도 똑같이 하게 된다.
  • 복잡한 경우가 아니라면 컨트롤러 계층의 테스트 코드 작성은 생략하고 필요한 검증들은 통합 테스트에서 진행

통합 테스트

✅ Controller, Service, Repository 모든 계층의 검증과, 의존, 유효성 등을 모두 진행하는 테스트

  • 모든 계층의 의존도 필요하기 때문에 Spring Container의 도움을 받아야 한다.
  • 통합 테스트를 위해 알아야 할 어노테이션 및 함수가 매우 많다.
반응형