저는 Spring Boot를 처음 사용하고 SpringBoot에서 테스트가 어떻게 작동하는지 이해하려고합니다. 다음 두 코드 스 니펫의 차이점이 무엇인지 약간 혼란 스럽습니다.
코드 스 니펫 1 :
@RunWith(SpringRunner.class)
@WebMvcTest(HelloController.class)
public class HelloControllerApplicationTest {
@Autowired
private MockMvc mvc;
@Test
public void getHello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Greetings from Spring Boot!")));
}
}
이 테스트는 @WebMvcTest
기능 슬라이스 테스트를위한 주석을 사용 하며 웹 애플리케이션의 MVC 레이어 만 테스트합니다.
코드 조각 2 :
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class HelloControllerTest {
@Autowired
private MockMvc mvc;
@Test
public void getHello() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("Greetings from Spring Boot!")));
}
}
이 테스트는 @SpringBootTest
주석과 MockMvc
. 그렇다면 이것이 코드 조각 1과 어떻게 다른가요? 이것이 다른 점은 무엇입니까?
편집 : 코드 조각 3 추가 (Spring 문서에서 통합 테스트의 예로 찾았습니다)
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class HelloControllerIT {
@LocalServerPort private int port;
private URL base;
@Autowired private TestRestTemplate template;
@Before public void setUp() throws Exception {
this.base = new URL("http://localhost:" + port + "/");
}
@Test public void getHello() throws Exception {
ResponseEntity < String > response = template.getForEntity(base.toString(), String.class);
assertThat(response.getBody(), equalTo("Greetings from Spring Boot!"));
}
}