Les tests unitaires Contrôleur REST avec spring-test-mvc
J'ai mis à jour mon Ressort de la dépendance au Printemps 3.1.1.La LIBÉRATION et la je suis en train d'utiliser printemps-test-mvc à l'unité de test d'un Contrôleur simple. J'ai suivi la technique utilisée dans Au REPOS du ressort du Contrôleur de Test avec le printemps-test-framework mvc, car il semble avoir travaillé pour cette personne, mais j'ai été infructueuses jusqu'à présent. Je pense qu'il y a certaines configuration de la clé de I"m manquant dans mon test fichier de contexte.
Je n'obtiens pas d'erreurs. La raison pour laquelle je sais que c'est pas le travail, c'est parce que Hello World
n'est jamais imprimé (voir le Contrôleur). Ce qui me manque ici?
Contrôleur:
@Controller
@RequestMapping("/debug")
public class DebugOutputController {
@RequestMapping(method = RequestMethod.POST)
public void saveDebugOutput(@RequestBody DebugOutput debugOutput, HttpServletResponse response) {
System.out.println("Hello World");
}
}
De La Classe De Test:
@RunWith(SpringJUnit4ClassRunner.class) //this lets tests access Spring beans defined in the context config file
@ContextConfiguration(locations={"file:src/test/resources/itest/restAPITestContext.xml"}) //tells the test where to get configuration and beans to be used by the test.
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class}) //overrides the default stack of listeners
public class ITRestAPI{
@Autowired
private DebugOutputController debugOutputController;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.standaloneSetup(debugOutputController).build();
}
@After
public void tearDown() throws Exception {
}
@Test
public void shouldPerformPost() throws Exception {
this.mockMvc.perform(post("/debug"));
}
}
restAPITestContext.xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<mvc:annotation-driven />
<mvc:default-servlet-handler />
<context:component-scan resource-pattern="*DebugOutputController*" base-package="com.company.project.servlet" />
</beans>
Toutes les informations que j'ai trouvé, c'est à partir de leur site Github.
OriginalL'auteur CFL_Jeff | 2012-05-17
Vous devez vous connecter pour publier un commentaire.
S'avère un
HttpMessageNotReadable
exception qui se passait et je ne pouvais pas le voir parce que je n'ai pas été la journalisation ou imprimer n'importe où. Je l'ai trouvé par la construction de la requête HTTP dans ma classe de test à l'aide de laDefaultRequestBuilder
de la classe et de l'ajout d'unandDo(print())
:Après, à l'aide de la sortie de
andDo(print())
, j'ai pu voir que laHttpMessageNotReadable
exception a été levée, mais ne connaissait pas les détails de l'exception ou de ce qui la causait. Pour voir les détails, j'ai dû ajouter à la classe de contrôleur à écrire les détails de l'exception pour le corps de la réponse:Cette étude a révélé l'exception suivante:
que j'ai fixée par l'ajout de la
@JsonProperty
annotation aux poseurs dans ma classe de modèle:J'utilise la méthode print() par l'importation de manière statique, comme suit:
import static org.springframework.test.web.server.result.MockMvcResultHandlers.print;
Cette méthode imprime les détails sur la requête en cours d'envoi. Il est TRÈS utile pour le débogage.convient de souligner que la déclaration d'importation est comme suit:
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print
OriginalL'auteur CFL_Jeff
Un bonne présentation de printemps-test-mvc artefact est à la fin de la présentation suivante, il commence autour de la page 116 de la doc.
OriginalL'auteur ThierryB