À l'aide de Printemps mockMvc de test en option variables de chemin d'accès

J'ai une méthode de Spring MVC avec l'option variable de chemin d'accès. Je suis en train de le tester pour un scénario facultatif variable de chemin d'accès n'est pas fourni.

Extrait de Contrôleur de ressource URI appeler-

@RequestMapping(value = "/some/uri/{foo}/{bar}", method = RequestMethod.PUT)
public <T> ResponseEntity<T> someMethod(@PathVariable("foo") String foo, @PathVariable(value = "bar", required = false) String bar) {

    LOGGER.info("foo: {}, bar: {}", foo, bar);
}

Extrait de mon test à l'aide de MockMvc-

//inject context
@Autowired
private WebApplicationContext webApplicationContext;

protected MockMvc mockMvc;

@Before
public void setup() {
    //build mockMvc
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}

@Test
public void someMethodTest() throws Exception {
    //works as expected
    mockMvc.perform(put("/some/uri/{foo}/{bar}", "foo", "bar"))
            .andExpect(status().isOk()); //works

    //following doesn't work

    //pass null for optional
    mockMvc.perform(put("/some/uri/{foo}/{bar}", "foo", null))
            .andExpect(status().isOk()); //throws 404

    //pass empty for optional
    mockMvc.perform(put("/some/uri/{foo}/{bar}", "foo", ""))
            .andExpect(status().isOk()); //throws 404

    //remove optional from URI
    mockMvc.perform(put("/some/uri/{foo}", "foo"))
            .andExpect(status().isOk()); //throws 404
}
Double Possible de stackoverflow.com/questions/17821731/.... En bref, vous devez utiliser les tableau de l'Uri de la demande de cartographie (@RequestMapping(valeur = {"/certains/uri/{foo}/{bar}", "/certains/uri/{foo}"})
Je ne pense pas que c'est un doublon de cette question PathVariable peut être en option et je l'utilise comme option dans le code affiché ci-dessus.

OriginalL'auteur Pankaj Kohli | 2017-08-22