본문 바로가기
Develop/Back-End

[Spring Boot] 단위 테스트 코드를 작성해보자 (1)

by 초코칩프라푸치노 2021. 8. 6.

⊙ TDD? 단위 테스트 코드?

TDD란?

Test-driven development의 약자로 테스트가 주도하는 소프트웨어 개발 프로세스를 의미한다.

기존에 디자인 - 코드 작성 - 테스트의 순서에서 벗어나 디자인 단계를 미리 정의하여, 테스트 코드를 먼저 작성하는 것부터 시작한다.

Red Green Cycle

  • Red: 항상 실패하는 테스트를 먼저 작성한다
  • Green: 테스트가 통과하는 프로덕션 코드를 작성한다
  • Refactor: 테스트가 통과하면 프로덕션 코드를 리팩토링한다

 

단위 테스트란?

단위 테스트 코드는 TDD의 첫 번째 단계인 기능 단위의 테스트 코드를 작성하는 것을 의미한다. 그럼 단위 테스트 코드는 왜 필요하며 어떤 이점이 있을까? 

  • 단위 테스트는 개발단계 초기에 문제를 발견하게 도와준다
  • 단위 테스트는 개발자가 나중애 코드를 리팩터링 하거나 라이브러리 업그레이드 등에서 기존 기능이 올바르게 작동하는지 확인할 수 있다(회귀 테스트)
  • 단위 테스트는 기능에 대한 불확실성을 감소시킨다
  • 단위 테스트는 시스템에 대한 실제 문서를 제공한다. 즉, 단위 테스트 자체가 문서로 사용할 수 있다

이러한 이점들 때문에 서비스 기업에서 특히나 강조를 많이 하며 Back-End 개발자가 익혀야 할 기술이자 습관이다. 자바에서는 JUnit을 사용해보자.

 

⊙ 실제로 단위 테스트를 진행해보자

 

Hellocontroller.java

  • @RestController

RestFul 통신이 용이하게 JSON 반환하는 컨트롤러로 만들어준다.

 

  • @GetMapping

Http Method인 Get의 요청을 받을 수 있는 API를 만들어준다.

 

HellocontrollerTest.java

  • @RunWith(SpringRunner.class)

테스트가 진행할 때 JUnit에 내장된 실행자 외에 다른 실행자를 실행시킨다. 여기서는 SpringRunner.class를 이용해 스프링 실행자를 사용한다. 즉, 스프링 부트 테스트와 JUnit 사이에 연결자 역할을 한다.

 

  • @WebMvcTest

여러 스프링 테스트 어노테이션 중, Web(Spring MVC)에 집중할 수 있는 어노테이션. 선언할 경우 @Controller, @ControllerAdvice는 사용할 수 있지만 @Service, @Component, @Repository는 사용할 수 없다.

 

  • private MockMvc mvc

웹 API를 테스트할 때 사용되며, HTTP GET, POST 등에 대해 API 테스트가 가능하다.

 

단위 테스트 결과

성공적으로 테스트한 것을 알 수 있다!

반응형

댓글