이번 주제는 테스트 관련입니다.
스프링에서는 @Value annotation을 통해서 application.properties에서 값을 가져와서 변수에 줄 수 있습니다.
이런 식으로 자주 이용합니다.
그렇다면 이를 테스트 하려면 어떻게 해야 할까요?
이렇게 테스트를 할 수 있습니다. 만약 @SpringBootTest가 없으면 name에 null이 들어갑니다.
하지만 서비스가 커지면, @SpringBootTest를 할 시에 테스트 실행 속도가 느려집니다. 그리고 다른 곳에서 bean을 주입할 때 에러가 생기는 등 이러한 현상이 발생하게 되면 이 테스트는 실패하게 됩니다.
단위 테스트를 하려면 어떻게 해야 할까요?
이런 식으로 할 수 있습니다.
만약 MyService에서 스프링 빈 주입 없이 단위 테스트를 하려면, setter를 선언해주거나 아니면
Assertions.assertEquals("input", new MyService("input").getName());
이렇게 생성자를 따로 만들어줘야 합니다. 이는 lomok의 @RequiredArgsConstruct를 넣어도 소용 없습니다.(final로 선언되어 있지 않아서)
그리고 @Value를 사용하려면 final을 붙이면 안되는데, 이는 다른 곳에서 변경을 할 수도 있다는 것을 의미합니다.
그래서 위의 방법이 저는 좋다고 생각합니다.(물론 생성자를 정의해줘야 하는 단점이 있습니다.)
일단 @Value를 통해 값이 제대로 들어가는 지 확인해봤습니다.
테스트를 통과합니다!
그렇다면 @SpringBootTest 없이 테스트 진행해보겠습니다.
이렇게 할 수 있습니다!
단위 테스트하기 좋아진 것을 볼 수 있습니다.
'BackEnd > spring' 카테고리의 다른 글
[Spring] AOP 테스트 (2) | 2023.12.21 |
---|---|
[Spring] 빈 주입 null pointer exception 발생 (0) | 2023.08.22 |
[인프런] 스프링 핵심 원리 고급편(김영한) 정리 (0) | 2023.07.30 |
[인프런] 스프링 핵심원리 기본편(김영한) 정리 (0) | 2023.07.28 |
[Spring] XSS 방지 (0) | 2023.05.26 |