web-dev-qa-db-fra.com

Test de Spring Boot 1.4 avec sécurité activée?

Je me demande comment dois-je procéder pour authentifier un utilisateur pour mes tests? En l'état actuel, tous les tests que j'écrirai échoueront car les points de terminaison nécessitent une autorisation.

Code de test:

@RunWith(SpringRunner.class)
@WebMvcTest(value = PostController.class)
public class PostControllerTest {

    @Autowired
    private MockMvc mvc;

    @MockBean
    private PostService postService;

    @Test
    public void testHome() throws Exception {
        this.mvc.perform(get("/")).andExpect(status().isOk()).andExpect(view().name("posts"));
    }


}

Une solution que j'ai trouvée consiste à le désactiver en définissant secure sur false dans @WebMvcTest. Mais ce n'est pas ce que j'essaie de faire.

Des idées?

14
Lithicas

Spring Security fournit un @WithMockUser annotation qui peut être utilisée pour indiquer qu'un le test doit être exécuté en tant qu'utilisateur particulier :

@Test
@WithMockUser(username = "test", password = "test", roles = "USER")
public void withMockUser() throws Exception {
    this.mockMvc.perform(get("/")).andExpect(status().isOk());
}

Alternativement, si vous utilisez l'authentification de base, vous pouvez envoyer l'en-tête Authorization requis:

@Test
public void basicAuth() throws Exception {
    this.mockMvc
            .perform(get("/").header(HttpHeaders.AUTHORIZATION,
                    "Basic " + Base64Utils.encodeToString("user:secret".getBytes())))
            .andExpect(status().isOk());
}
28
Andy Wilkinson