Essai d'unité Springboot
J'ai les classes suivantes :
ApplicationAndConfiguration classe
package mypackage.service;
import mypackage.service.util.MyUtility;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class ApplicationAndConfiguration {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(ApplicationAndConfiguration.class, new String[]{});
}
@Bean(initMethod="init")
public MyUtility birtUtil() {
return new MyUtility();
}
}
MyRestController classe
package mypackage.service.controllers;
import mypackage.service.util.MyUtility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyRestController {
@Autowired
private MyUtility util;
@RequestMapping("/getLibraryName")
public String getMessageFromRest(@RequestParam String name) {
return "name was " + name + "//" + util.getMessage();
}
}
MyUtility classe
package mypackage.service.util;
public class MyUtility {
private String message;
public void init() {
setMessage("MyUtility correctly initialized!");
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
Quand je démarre l'application et l'exécuter en tant qu'indépendant pot, ou à partir de l'IDE (Eclipse), pas de problème, tout fonctionne comme prévu.
Cependant, je veux écrire un test unitaire pour tester mon MyRestController classe ... et je suis un NPE parce que le Autocâblés champ util est nul (au MyRestController classe).
Voici ma classe de test :
package mypackage.service.controllers;
import static org.hamcrest.Matchers.equalTo;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import mypackage.service.ApplicationAndConfiguration;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
@SpringApplicationConfiguration(classes = ApplicationAndConfiguration.class)
@WebAppConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class TestController {
private MockMvc mvc;
@Before
public void setup() throws Exception {
mvc = MockMvcBuilders.standaloneSetup(new MyRestController()).build();
}
@Test
public void MyTestController() throws Exception {
mvc.perform(MockMvcRequestBuilders.get("/getLibraryName").param("name", "test").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().string(equalTo("name was test//MyUtility correctly initialized!")));
}
}
Je suis définitivement manque quelque chose pour que mon Autocâblés champ se remplit pendant la phase de tests, et pas seulement pendant l'exécution de l'application ...
Un pointeur pourquoi ça ne marche pas ?
source d'informationauteur hublo
Vous devez vous connecter pour publier un commentaire.
MockMvc programme d'installation autonome est pour les tests unitaires. Vous faites des tests d'intégration lors de la création de Printemps contexte de test. Ne pas mélanger ces deux types de tests.
Donc il suffit de changer cette façon:
Depuis SpringBoot 1.4, toutes les classes changé et obsolètes https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-1.4.0-M2-Release-Notes. Remplacer la roue et de la Configuration avec les ci-dessous. SpringRunner va détecter le framework de test pour vous.
Toutes ces instances seront autocâblés comme prévu! Même le Printemps des Événements avec l'Éditeur fonctionne comme prévu, comme dans https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2.