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):
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(); 	
		}
 
	}
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
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);
}
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
 
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)
Des idées ?