[ERROR] MockMvc NullPointerException Spring Boot

반응형

1. 문제

JUnit test에서 MockMvc를 사용할 때 Configure가 MockMvc를 제대로 찾지 못해 NullPointerException이 발생할 수 있다.

image.png

2. 원인

아래와 같이 MockMvc를 @Before에서 setup 하고 있는데 왜 에러가 발생하는지는 잘 모르겠다.

변경전

@RunWith(SpringRunner.class)
@SpringBootTest
class HelloResourceTest {

    private MockMvc mockMvc;

    @InjectMocks
    private  HelloResource helloResource;

    @Before
    public void setUp() throws Exception {
        mockMvc = MockMvcBuilders.standaloneSetup(helloResource)
                .build();
    }

    @Test
    public void testHelloWorld() throws Exception{
        mockMvc.perform(
                MockMvcRequestBuilders.get("/hello"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("Hello World!"));
    }
}

3. 해결

Test 상단에 @AutoConfigureMockMvc을 추가하고, 기존에 @Before에서 setup하던 MockMvc를 @Autowired로 주입받아 사용하면 된다. @InjtectMocks도 사용할 필요가 없어진다.

변경후

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
class HelloResourceTest {

    @Autowired
    private MockMvc mockMvc;

    // @InjectMocks
    // private  HelloResource helloResource;

    @Before
    public void setUp() throws Exception {
          // mockMvc = MockMvcBuilders.standaloneSetup(helloResource)
          //           .build();
    }

    @Test
    public void testHelloWorld() throws Exception{
        mockMvc.perform(
                MockMvcRequestBuilders.get("/hello"))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andExpect(MockMvcResultMatchers.content().string("Hello World!"));
    }

}

위와 같이 변경하면, 아래와 같이 Test가 통과한다.

image.png


추천서적

 

스프링 부트와 AWS로 혼자 구현하는 웹 서비스

COUPANG

www.coupang.com

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

댓글

Designed by JB FACTORY