Tôi mới sử dụng Spring Boot và đang cố gắng hiểu cách kiểm tra hoạt động trong SpringBoot. Tôi hơi bối rối về sự khác biệt giữa hai đoạn mã sau:
Đoạn mã 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!")));
}
}
Thử nghiệm này sử dụng @WebMvcTest
chú thích mà tôi tin là để kiểm tra phần tính năng và chỉ kiểm tra lớp MVC của một ứng dụng web.
Đoạn mã 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!")));
}
}
Kiểm tra này sử dụng @SpringBootTest
chú thích và a MockMvc
. Vậy đoạn mã này khác với đoạn mã 1 như thế nào? Điều này làm gì khác?
Chỉnh sửa: Thêm đoạn mã 3 (Tìm thấy đây là một ví dụ về thử nghiệm tích hợp trong tài liệu 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!"));
}
}