//@RunWith(SpringRunner.class) // avec JUnit4 @ExtendWith(SpringExtension.class) // avec Junit 5 @SpringBootTest @ContextConfiguration @AutoConfigureMockMvc public class MovieControllerTest { @Autowired MockMvc mockMvc; @Autowired // il va convertir nos données en JSON lorsque nous voulons invoquer notre API //comme le ferait par exemple un client JavaScript. private ObjectMapper objectMapper; JacksonTester<Movie> movieJacksonTester; @MockBean // Les mocks vont être créés par spring-boot-test qui apporte une encapsulation de Mockito MovieService movieService; @MockBean // Les mocks vont être créés par spring-boot-test qui apporte une encapsulation de Mockito CategoryService categoryService; @BeforeEach public void setUp() { JacksonTester.initFields(this, objectMapper); } @Test @DisplayName("Test : Tous les Movies sont retournés") @WithMockUser(username="pbouget", roles={"ADMIN", "CREATOR","READER"}) // @WithAnonymousUser public void getAllMovies() throws Exception { when(this.movieService.findAllMovies()).thenReturn(new ArrayList<Movie>()); // on retourne la liste this.mockMvc.perform(get("/api/movie/all")).andExpect(status().isOk()); } @Test @DisplayName("Test : Tous les Movies ne sont pas retournés") @WithMockUser(username="pbouget", roles={"ADMIN", "CREATOR","READER"}) public void getMoviesNotFound() throws Exception { when(this.movieService.findAllMovies()).thenReturn(null); // on ne retourne rien this.mockMvc.perform(get("/api/movie")).andExpect(status().isNotFound()); } @Test @DisplayName("Test : création d'un Movie") @WithMockUser(username="pbouget", roles={"ADMIN", "CREATOR","READER"}) public void createMovie() throws Exception { Category category = categoryService.createNewCategory(new Category("Film culte")); Movie movie = new Movie("Dikkenek", 92, category); when(this.movieService.createNewMovie((Movie) (any()))).thenReturn(movie); this.mockMvc.perform(post("/api/movie/add") .contentType(MediaType.APPLICATION_JSON) .content(objectMapper.writeValueAsString(movie))) .andExpect(status().isOk()) .andExpect(jsonPath("name").value("Dikkenek")) .andExpect(jsonPath("duration").value("92")); // .andExpect(jsonPath("movie.category.name").value("Film culte")); // .andExpect(jsonPath("category.name").value("Film culte")); } @Test @DisplayName("Test : La création de Movie retourne null") @WithMockUser(username="pbouget", roles={"ADMIN", "CREATOR","READER"}) public void createMovieReturnNull() throws Exception { when(this.movieService.createNewMovie((Movie) any())).thenReturn(null); this.mockMvc.perform(post("/api/movie") .content("")) .andReturn(); } @Test @DisplayName("Test : Destruction d'un Movie introuvable") @WithMockUser(username="pbouget", roles={"ADMIN", "CREATOR","READER"}) public void deleteMovieNotFound() throws Exception { // doNothing().when(this.movieService).deleteMovie(9L); this.mockMvc.perform(delete("/api/movie/9")) .andExpect(status() .isNotFound()); } }
Lien vers la documentation Spring sur l’utilisation des Mocks…
en anglais
en français