Je suis nouveau sur le Printemps de Démarrage et essaie de comprendre comment le test fonctionne dans SpringBoot. Je suis un peu confus au sujet de ce qu'est la différence entre les deux extraits de code:
Extrait de Code 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!")));
}
}
Ce test utilise la @WebMvcTest annotation qui, je crois, est fonction de la tranche d'essai et ne teste que le Mvc couche d'une application web.
Extrait de Code 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!")));
}
}
Ce test utilise la @SpringBootTest d'annotation et d'un MockMvc. Alors, comment est-ce différent de l'extrait de code 1? Qu'est-ce faire différemment?
Edit: L'ajout d'Extrait de Code 3 (Trouvé cela comme un exemple de test d'intégration dans le Ressort de la documentation)
@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!"));
}
}