JUnit5/ JUnit5 +Kotlin 이슈

Shaun·2023년 3월 9일
1

JUnit5

목록 보기
1/1
post-thumbnail

최근에는 계속 사용하던 SpringBoot도 병행하며 좀 더 깊게 공부한는 중이다. 이와중에 테스트 코드를 작성 하던 도중 문득 JUnit에 대해서도 깊게 알지 못한다고 느꼈다.또한 평소에 궁금했던점이 코틀린으로 프로젝트를 진행하면서 만난 이슈와 같은 문제라 공부 해봤다.

의존성 주입

일반적으로 의존성 주입을 받을때 생성자,필드,세터 주입 이렇게 세가지가 있다.

주로 lombok @RequiredArgsConstructor를 이용해 final 타입 (필드의 생성자를 자동으로 만들어줌)을 통해 의존성 주입을 받는다. 이글은 의존성 주입에 관한 글이 아니기에 자세한 설명은 생략한다.

그런데 테스트 코드를 작성하면서 궁금한게 내가 기존에 하던 방식으로 의존성 주입을 하면 실패하고 @Autowired 를 사용해야 정상적으로 동작하게 된다. 왜 그럴까?

-> Junit5가 DI를 스스로 지원하기 때문

그래서 기존에 하던 lombok을 사용해 의존성을 주입하려 하면 Junit5가 먼저 개입을 해버린다.

Kotlin + Junit5

  • 최근에 코틀린으로 개인 프로젝트 테스트 코드를 작성하다가 의존성 주입이 안돼서 찾아봤다.
  • 코틀린의 특성상 자동으로 생성자를 주입 시켜 주기 때문에 테스트 코드 작성시에도 이렇게 하면 될줄알았다! 하지만 위에서 설명했듯이 의존성 주입시 JUnit5 가 먼저 개입을 함으로 @Autowired를 사용해줘야 함

JUnit5

  • JUnit5의 아키텍쳐는 크게 세가지로 나눌 수 있다.

JUnit Platform

  • 테스트를 실행할 수 있는 엔진을 포함하고 여러 Tool(콘솔, 이클립스, Intellij등의 IDE)에 일관성 있는 API를 제공해주는 역할을 담당

Jupiter,Vintage

  • 둘다 JUnit Platform 의 구현체
  • 차이점은 Jupiter는 JUnit 5의 구현체이며 Vintage는 하위 버전(JUnit 4, JUnit 3)들에 대한 지원을 위해 구현된 구현체

-> 우리가 주로 사용하는것은 JUnit5 이므로 Jupiter를 사용한다고 보면된다.

결론

  • 스프링 프레임워크가 아닌 테스트 프레임워크임을 명심하자
  • 따지고보면 스프링컨테이너가 아닌 JUpiter가 생성자 매개변수 담당자이다.
  • @Autowired를 선언해줘야 JUpiter가 보고 스프링컨테이너에게 빈 주입을 요청한다
profile
호주쉐프에서 개발자까지..

0개의 댓글