Bonjour à tous,
J'ai une application spring boot qui expose des WS REST via des contrôlleurs.
Je suis en train d'écrire le test unitaire d'un contrôleur. Et j'ai une erreur d'assertion qui dit que le statut attendu est 200 mais il était 404.
Voilà le code du contrôleur à tester (je mets uniquement le code du ws que je veux tester):
Voilà le code du TU de mon contrôleur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 @Component @Log4j2 @Path("/demande") @Produces({ MediaType.APPLICATION_JSON }) @RolesAllowed(HabilitationsManager.ROLE_ADM) public class DemandeRestController { //Some services .... //WS à tester @GET @Path("/donnees/{idDecla}") @Produces({MediaType.APPLICATION_JSON}) public Response getDonnees(@PathParam("idDecla") Long idDecla){ try{ DonneesDto donnees = demandeService.getDonnees(idDecla); return Response.status(200).entity(donnees).build(); }catch(FonctionnelleException e){ return Response.status(500).entity(new ExceptionDto("Recherche de donnée", e.getMessage())).build(); } }
Et voilà le résultat du JUnit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 @RunWith(SpringJUnit4ClassRunner.class) @WebMvcTest(DemandeRestController.class) @WebAppConfiguration public class DemandeRestControllerTest { //######################################### //~ Attributs. //######################################### @Autowired private MockMvc mvc; @MockBean private DemandeRestController demandeRestController; @MockBean private DemandeService demandeService; @Autowired WebApplicationContext wac; //######################################### //~ Initialisation du context de tests. //######################################### @Before public void setup() { // this must be called for the @Mock annotations above to be processed. MockitoAnnotations.initMocks(this); this.mvc = MockMvcBuilders.webAppContextSetup(this.wac).dispatchOptions(true).build(); } //######################################### //~ Tests. //######################################### @Test public void getDonneesTest_success() throws Exception{ //Given Long idDeclaration = 1L; DonneesDto donne = new DonneesDto(); Response reponse = Response.status(200).entity(donne).build(); URI uri = new URI("/rest/demande/donnees/19"); //When given(demandeService.getDonnees(idDeclaration)).willReturn(donne); //Then ResultMatcher rm = MockMvcResultMatchers.jsonPath("reponse", is(reponse)); ((ResultActions) mvc.perform(get(uri))) .andExpect(status().isOk()) .andExpect(rm); }
Des idées ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 java.lang.AssertionError: Status expected:<200> but was:<404> at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:54) at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:81) at org.springframework.test.web.servlet.result.StatusResultMatchers$10.match(StatusResultMatchers.java:665) at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:171) at fr.bnf.isnidem.test.rest.DemandeRestControllerTest.getDonneesTest_success(DemandeRestControllerTest.java:145) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:252) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:94) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:191) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Partager