J'essaie de créer mon premier test pour un simple contrôleur spring-boot mais je reçois Handler: Type = null
. Dans le code du navigateur est le travail, mais un test échoue. Mon application utilise printemps-sécurité. S'il vous plaît, aidez-moi à résoudre le problème et à comprendre mon erreur. Je vous remercie.Pourquoi le test de printemps échoue, ne fonctionne pas @MockBean
Ce contrôleur est:
private final ItemService service;
@GetMapping("/get_all_items")
public String getAllItems(Model model) {
model.addAttribute("items", service.getAll());
return "all_items";
}
Ceci est un test.
@RunWith(SpringRunner.class)
@WebMvcTest(ItemController.class)
public class ItemControllerTest {
@Autowired
private MockMvc mvc;
@MockBean
private ItemService itemService;
@Test
@WithMockUser(username = "user", roles = "user")//mock security.
public void whenGetAllItemsThenControllerReturnAllItems() throws Exception {
given(
itemService.getAll()
).willReturn(
new ArrayList<Item>()
);
mvc.perform(
get("/get_all_items").accept(MediaType.TEXT_HTML)
).andExpect(
status().isOk()
);
}
}
C'est résultat journal:
MockHttpServletRequest: HTTP Method = GET Request URI = /get_all_items Parameters = {} Headers = {Accept=[text/html]}
Handler: Type = null
Async: Async started = false Async result = null
Resolved Exception: Type = null
ModelAndView: View name = null View = null Model = null
FlashMap: Attributes = null
MockHttpServletResponse: Status = 403 Error message = Access is denied Headers = {X-Content-Type-Options=[nosniff], X-XSS-Protection=[1; mode=block], Cache-Control=[no-cache, no-store, max-age=0, must-revalidate], Pragma=[no-cache], Expires=[0], X-Frame-Options=[DENY], Strict-Transport-Security=[max-age=31536000 ; includeSubDomains]} Content type = null Body = Forwarded URL = null Redirected URL = null Cookies = []
java.lang.AssertionError: Status Expected :200 Actual :403
Avez-vous essayé '@ MockMvc'? Y a-t-il des changements? – Reborn
L'erreur est juste là. ': Status = 403 Message d'erreur = L'accès est refusé Header'. Vous devez fournir des informations de sécurité ou les désactiver pour les tests unitaires. –
@Darren Forsythe Oui mais j'utilise '@WithMockUser (username =" user ", roles =" user ")' ce n'est pas suffisant? Comment implémenter fournir des creds de sécurité? Je pense que mon @WithMockUser résoudre. – Pavel