반응형
현상
@SpringBootTest
@AutoConfigureMockMvc
@TestConstructor(autowireMode = TestConstructor.AutowireMode.ALL)
internal class StoreControllerTest(val mockMvc: MockMvc) {
@Test
@DisplayName("store id로 store를 조회")
internal fun getStoreTest() {
mockMvc.perform(get("/stores/{id}", 1))
.andExpect(status().isOk)
.andExpect(jsonPath("\$.id").value(1))
.andExpect(jsonPath("\$.name").value("스토어1"))
.andExpect(jsonPath("\$.address").value("주소1"))
.andDo(print())
}
}
위와 같은 코드로 작성하고 테스트를 실행하면 MockMvc를 주입받을 수 없다는 메시지가 출력됩니다.
No qualifying bean of type 'org.springframework.test.web.servlet.MockMvc' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
원인
WebFlux환경에서 테스트를 진행하고 있었습니다.
dependencies {
implementation("org.springframework.boot:spring-boot-starter-webflux")
}
MockMvc를 사용할 때는 WebFlux환경에서는 불가하고 합니다.
- stackoverflow.com/questions/51824274/spring-boot-webflux-test-not-finding-mockmvc
- stackoverflow.com/questions/49330878/what-is-the-difference-between-mockmvc-and-webtestclient
해결
Web환경으로 테스트를 진행하면 정상작동됩니다.
dependencies {
implementation("org.springframework.boot:spring-boot-starter-web")
}
반응형