Test register acc spring

0

czym może być spowodowany błąd w tescie org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException ?? przy kodzie testu

    public void test_create_user_success() throws Exception {
    	User user =  new User(1, "Daenerys","Targaryes","emaill","haslo");
 
       when(userService.addWithDefaultRole(user));

        mockMvc.perform(
                post("/api/register")
                
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(asJsonString(user)))
        .andExpect(status().isCreated())
        .andExpect(header().string("location", containsString("api/user/1")));


   
        verify(userService, times(1)).addWithDefaultRole(user);
        verifyNoMoreInteractions(userService);
    } ```

https://github.com/PatrykBrzuchacz/SpringProjekt-master3-master
0

Pokaż linię, w której NullPointerException zachodzi. Tylko nie np 34, bo w twoim kodzie nie ma numeracji. Pokaż konkretnie linijkę w której leci

0

pobawilem sie troche i teraz mam :

 @Test
    public void test_create_user_success() throws Exception {
    	User user =  new User("Daenerys","Targaryes","ema@adsill","hasewlo");
 
       when(userService.addWithDefaultRole(user));

        mockMvc.perform(
                post("/api/register"))
        .andExpect(status().isOk())
        .andExpect(content().contentType(MediaType.APPLICATION_JSON))
                      
        .andExpect(status().isCreated())
        .andExpect(header().string("location", containsString("api/user/1")));


   
        verify(userService, times(1)).addWithDefaultRole(user);
        verifyNoMoreInteractions(userService);
    }

a blad
http://wklej.org/id/3424837/
co moze byc tym spowodowane? dodam jeszcze controller:

@PostMapping("/register")
		public ResponseEntity<Void> register(@RequestBody User user,BindingResult result,UriComponentsBuilder ucBuilder ) {
			
			validator.validate(user, result);
			if (result.hasErrors()){
	            return new ResponseEntity<Void>(HttpStatus.CONFLICT);}
			else {
		userService.addWithDefaultRole(user);
		 HttpHeaders headers = new HttpHeaders();
	        headers.setLocation(ucBuilder.path("/users/{id}").buildAndExpand(user.getId()).toUri());
	        return new ResponseEntity<Void>(headers, HttpStatus.CREATED);
			}}
0

linia bledu to .andExpect(status().isOk())

0

Zwracasz odpowiedź 201, a w teście sprawdzasz czy jest 200.

0

tzn to nie ten blad, zmienialem to i przez przypadek tylko zamiast OK jest crated, to nie o to chodzi

0
when(userService.addWithDefaultRole(user)).thenReturn(user)

Tu moim zdaniem jest problem.
Mockito zapina się na usera po referencji - nie masz w klasie usera hashcode i equals.
Do kontrolera przychodzi obiekt user'a, który jest "kopią" twojego obiektu usera.

Swoją drogą to te testy są bez sensu.
Nie uważasz, że lepiej przetestować to, czy założony user, może być odnaleziony po ścieżce, która jest w location? Tylko proszę, nie używaj do tego mockito. Użyj jakiejś bazy w pamięci - h2, albo zaimplementuj samemu jakąś bazę na hash mapie. I tak cały kontekst springa wstaje Ci do testów, postawienie bazy h2 nie będzie tutaj kosztowne.

0

Jestem nowicjuszem a na jutro musze oddac ten projekt wiec nie mam juz czasu zmieniac ;/ musze zrobic jeszcze pare testow, trudno, na razie bedzie tak jak jest a kiedys je pozmieniam jak bedzie wiecej czasu,

Moglbys ktos prosze wytlumaczyc jak moge pozbyc sie tego bledu ?? http://wklej.org/id/3425068/
W wielu testach go mam, testy takie jak np : http://wklej.org/id/3425071/

1 użytkowników online, w tym zalogowanych: 0, gości: 1