[Spring Boot][WS Rest][JUnit] Erreur d'assertion lors d'un Test unitaire unitaire du controlleur
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:
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:
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:
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 ?