ฉันเพิ่งเริ่มใช้ 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!"));
}
}