웹 개발

Spring boot에서 JUnit 사용 시 Autowired가 동작하지 않는 현상

노루아부지 2021. 3. 8. 10:13

Spring boot 환경에서 Controller의 Test를 만드는 중, @Autowired된 클래스가 null이 되는 현상이 발생했습니다.

해결방법은 다음과 같습니다.

 

1. 개발 환경

1) OS : Windows 10

2) 개발 툴 : IntelliJ

3) 빌드 툴 : Maven

4) java version : openjdk 1.8

5) spring boot version : 2.3.1

5) JUnit version : 4

 

 

 

2. 테스트 코드

 

@AutoConfigureMockMvc
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
public class MyTest {

  @Autowired
  MockMvc mockMvc;

  @Test
  public void commonLogin() throws Exception {
    log.debug("START dummy test");
    MvcResult mvcResult = mockMvc.perform(post("/test")
        .param("L_TYPE", "dummy")
    )
        .andExpect(status().isOk())
        .andDo(print())
        .andReturn();

    MockHttpServletResponse response = mvcResult.getResponse();
    assertEquals(200, response.getStatus());
  }
}

 

 

3. 해결방법

소스코드에 @RunWith( SpringJUnit4ClassRunner.class ) 를 추가하면 됩니다.

해당 내용을 추가한 내용은 다음과 같습니다.

 

@AutoConfigureMockMvc
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
@RunWith(SpringJUnit4ClassRunner.class)
public class MyTest {

  @Autowired
  MockMvc mockMvc;

  @Test
  public void commonLogin() throws Exception {
    log.debug("START dummy test");
    MvcResult mvcResult = mockMvc.perform(post("/test")
        .param("L_TYPE", "dummy")
    )
        .andExpect(status().isOk())
        .andDo(print())
        .andReturn();

    MockHttpServletResponse response = mvcResult.getResponse();
    assertEquals(200, response.getStatus());
  }
}

 

 

참고 사이트 : stackoverflow.com/questions/17623694/spring-not-autowiring-in-unit-tests-with-junit

 

728x90
loading