안녕하세요. Java백엔드 개발자를 꿈꾸며 공부중인 김은철입니다.
해당 포스팅의 내용은 이해한 내용을 토대로 작성되었습니다.
그렇기 때문에 포스팅에 잘못된 내용이 포함되어 있을 수 있음과 미흡한 점이 있을 수 있습니다.
의아한 내용이나 틀린 내용이 있다면 적극적인 지적과 므흡한 내용, 그리고 추가적으로 학습하며 좋을 내용을 알려주시면 감사하겠습니다.
여러분의 지적과 관심은 저의 성장에 큰 도움이 될 것이라 확신합니다.
감사합니다.
안녕하세요. 이번 포스팅에서는 API계층 슬라이스 테스트를 진행하며 마주했던 문제와 문제를 해결하기 위해 찾았던 자료들중, 읽어보면 좋을법한 자료에 대해서 소개해보겠습니다.
1. API 계층 테스트를 진행하며 마주했던 문제
[1] Unable to find a @SpringBootConfiguration... 발생
package com.controller; // [1]
// ... 이하 코드생략
// ... 이하 코드생략
@SpringBootTest // [2]
@AutoConfigureMockMvc // [3]
class MemberControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private Gson gson;
@Test
void postMemberTest() throws Exception {
// given
MemberDto.Post post = MemberDto.Post.builder()
.email("hgd@gmail.com")
.name("홍길동")
.phone("010-1234-5678")
.build();
String content = gson.toJson(post);
ResultActions actions =
// ... 이하 코드생략
// ... 이하 코드생략
}
}
Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test java.lang.IllegalStateException
위의 코드는 문제가 되었던 일부를 발췌해왔습니다. 테스트를 실행하고 저는 최소한으로 애플리케이션이 실행되는 것을 기대했는데 위의 로그와 에러가 발생하였습니다. 로그를 보면 @SpringBootTest를 사용하라고 이야기하고 있는데, 코드 2번의 주석처럼 명시를 하였고 테스트를 위한 Application Context를 구성했습니다. 해답은 준수한쭈니네님의 포스팅에서 찾을 수 있었습니다.
* 해결방안
기능이 구현된 패키지를 살펴 보았을 때 @SpringBootApplication이 붙어있는 클래스의 패키지 구조는 com.euncheol.자바파일
이었습니다. 문제가 되었던 코드의 패키지는 controller.MemberControllerTest.java
인데 테스트 패키지 구조에서 MemberControllerTest 클래스 파일을 com.euncheol
의 하위로 바꾸어주니 문제를 해결할 수 있었습니다. 해결된 코드는 아래와 같습니다.
package com.euncheol.controller; // [1]
// ... 이하 코드생략
// ... 이하 코드생략
@SpringBootTest // [2]
@AutoConfigureMockMvc // [3]
class MemberControllerTest {
@Autowired
private MockMvc mockMvc;
@Autowired
private Gson gson;
@Test
void postMemberTest() throws Exception {
// given
MemberDto.Post post = MemberDto.Post.builder()
.email("hgd@gmail.com")
.name("홍길동")
.phone("010-1234-5678")
.build();
String content = gson.toJson(post);
ResultActions actions =
// ... 이하 코드생략
// ... 이하 코드생략
}
}
* 발생했던 다른 문제
어제 새벽에 문제가 발생하고 다음날의 오후에 포스팅을 진행하는 것인데... 역직렬화를 돕는 Gson에서 NPE
문제가 발생했었습니다. 왜 발생했었는지 코드에 작성했었는데... 어떤 이유여서인지 NPE문제가 발생되지 않았지만 이 또한 패키지를 맞춰주니 해결했었습니다. 그리고 Gson과 관련한 내용이 있었는데 궁금하시면 아래 글을 참고해주세요.
1. Gson초기화 추천 방법
참고자료 : Stack Overflow 질문 내용
해당 글에 의하면 Gson을 주입으로 사용하는 것보단, 새로운 객체를 만들어 사용하길 권장하는듯 합니다. 권장 방식은 아래와 같습니다.
@Autowired
private Gson gson;
// 권장 방식 : private Gson gson = new GsonBuilder().create();
* 마무리하며
어려웠던 문제는 아니었습니다 :)