Comment écrire un test unitaire pour un sharepoint terminaison Spring Boot Controller

J’ai un exemple d’application Spring Boot avec les éléments suivants

Classe principale de démarrage

@SpringBootApplication public class DemoApplication { public static void main(Ssortingng[] args) { SpringApplication.run(DemoApplication.class, args); } 

Manette

 @RestController @EnableAutoConfiguration public class HelloWorld { @RequestMapping("/") Ssortingng gethelloWorld() { return "Hello World!"; } } 

Quelle est la manière la plus simple d’écrire un test unitaire pour le contrôleur? J’ai essayé ce qui suit, mais il se plaint de ne pas pouvoir créer automatiquement WebApplicationContext

 @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = DemoApplication.class) public class DemoApplicationTests { final Ssortingng BASE_URL = "http://localhost:8080/"; @Autowired private WebApplicationContext wac; private MockMvc mockMvc; @Before public void setup() { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); } @Test public void testSayHelloWorld() throws Exception{ this.mockMvc.perform(get("/") .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))) .andExpect(status().isOk()) .andExpect(content().contentType("application/json")); } @Test public void contextLoads() { } } 

Spring MVC propose une configuration autonome prenant en charge le test de contrôleurs relativement simples, sans nécessiter de contexte.

Construisez un MockMvc en enregistrant une ou plusieurs instances de @ Contrôleur et en configurant par programmation l’infrastructure Spring MVC. Cela permet un contrôle total sur l’instanciation et l’initialisation des contrôleurs et de leurs dépendances, de la même manière que pour les tests unitaires simples, tout en permettant de tester un contrôleur à la fois.

Un exemple de test pour votre contrôleur peut être aussi simple que

 public class DemoApplicationTests { private MockMvc mockMvc; @Before public void setup() { this.mockMvc = standaloneSetup(new HelloWorld()).build(); } @Test public void testSayHelloWorld() throws Exception { this.mockMvc.perform(get("/").accept(MediaType.parseMediaType("application/json;charset=UTF-8"))) .andExpect(status().isOk()) .andExpect(content().contentType("application/json")); } } 

Les nouvelles améliorations apscopes aux tests qui ont fait leur 1.4.M2 dans Spring Boot 1.4.M2 peuvent aider à réduire la quantité de code nécessaire pour écrire de telles situations.

Le test devrait ressembler à ceci:

 import static org.springframework.test.web.servlet.request.MockMvcRequestB‌​uilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMat‌​chers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMat‌​chers.status; @RunWith(SpringRunner.class) @WebMvcTest(HelloWorld.class) public class UserVehicleControllerTests { @Autowired private MockMvc mockMvc; @Test public void testSayHelloWorld() throws Exception { this.mockMvc.perform(get("/").accept(MediaType.parseMediaType("application/json;charset=UTF-8"))) .andExpect(status().isOk()) .andExpect(content().contentType("application/json")); } } 

Voir ce blog pour plus de détails ainsi que la documentation

Voici une autre réponse en utilisant standaloneSetup de Spring MVC. De cette façon, vous pouvez soit envoyer automatiquement la classe du contrôleur, soit la simuler.

  import static org.mockito.Mockito.mock; import static org.springframework.test.web.server.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.server.result.MockMvcResultMatchers.content; import static org.springframework.test.web.server.result.MockMvcResultMatchers.status; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.web.server.MockMvc; import org.springframework.test.web.server.setup.MockMvcBuilders; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) public class DemoApplicationTests { final Ssortingng BASE_URL = "http://localhost:8080/"; @Autowired private HelloWorld controllerToTest; private MockMvc mockMvc; @Before public void setup() { this.mockMvc = MockMvcBuilders.standaloneSetup(controllerToTest).build(); } @Test public void testSayHelloWorld() throws Exception{ //Mocking Controller controllerToTest = mock(HelloWorld.class); this.mockMvc.perform(get("/") .accept(MediaType.parseMediaType("application/json;charset=UTF-8"))) .andExpect(status().isOk()) .andExpect(content().mimeType(MediaType.APPLICATION_JSON)); } @Test public void contextLoads() { } } 

L’ajout de l’ @WebAppConfiguration ( org.springframework.test.context.web.WebAppConfiguration ) à votre classe DemoApplicationTests fonctionnera.