java.lang.AssertionError: JSON path „$“ Erwartet: eine Sammlung mit Größe , aber: Sammlungsgröße war . Ich habe meine API mit openApi getestet und es hat gut funktioniert.
hier ist mein Code
UserControllerTest.java
Code: Select all
package com.RCTR.usersys;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.util.ArrayList;
import java.util.List;
import static org.hamcrest.Matchers.*;
import org.aspectj.lang.annotation.Before;
import java.util.Arrays;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MockMvcBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import com.RCTR.usersys.controller.UserController;
import com.RCTR.usersys.entity.UserEntity;
import com.RCTR.usersys.model.User;
import com.RCTR.usersys.repository.UserRepository;
import com.RCTR.usersys.service.UserService;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;
@ExtendWith(MockitoExtension.class)
public class UserControllerTest {
private MockMvc mockMvc;
ObjectMapper objectMapper = new ObjectMapper();
ObjectWriter objectwriter = objectMapper.writer();
@Mock
private UserService userService;
@InjectMocks
private UserController userController;
User USER_1 = new User(1L ,"Laur","Pinzaru","[email protected]" );
User USER_2 = new User(2L ,"Petru","Gologan","[email protected]" );
User USER_3 = new User(3L ,"Luca","Pinzaru","[email protected]" );
@BeforeEach
public void setUp(){
MockitoAnnotations.openMocks(this);
this.mockMvc = MockMvcBuilders.standaloneSetup(userController).build();
}
@Test
public void getAllUsersSuccess() throws Exception{
List users = new ArrayList(Arrays.asList(USER_1,USER_2,USER_3));
Mockito.when(userService.getAllUsers()).thenReturn(users);
System.out.println("Mocked users: " + userService.getAllUsers());
mockMvc.perform(MockMvcRequestBuilders
.get("/api/v1/users")
.contentType(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$", hasSize(3)))
.andExpect(jsonPath("$[2].firstName", is("Luca")));
// .andExpect(jsonPath("$[1].lastName", is(Gologan)));
}
}
Code: Select all
package com.RCTR.usersys.controller;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.RCTR.usersys.model.User;
import com.RCTR.usersys.service.UserService;
@RestController
@RequestMapping("/api/v1/")
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
@PostMapping("/user")
public User saveUser(@RequestBody User user){
return userService.saveUser(user);
}
@GetMapping("/users")
public List getAllUsers(){
List users = userService.getAllUsers();
System.out.println("Users from service: " + users);
return users;
// return userService.getAllUsers();
}
@GetMapping("/users/{id}")
public ResponseEntity getUserById(@PathVariable("id")Long id){
User user = null;
user = userService.getUserById(id);
return ResponseEntity.ok(user);
}
@DeleteMapping("/users/{id}")
public ResponseEntity deleteUser(@PathVariable("id")Long id){
boolean deleted = false;
deleted = userService.deleteUser(id);
Map response = new HashMap();
if (deleted) {
response.put("deleted", true);
return ResponseEntity.ok(response);
} else {
response.put("deleted", false);
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response);
}
}
@PutMapping("/users/{id}")
public ResponseEntity updateUser(@PathVariable("id")Long id,@RequestBody User user){
user = userService.updateUser(id,user);
return ResponseEntity.ok(user);
}
}
Ich habe versucht, UserRepository direkt zu verwenden, und ich habe einen anderen Fehler erhalten, dann habe ich versucht, Protokolle zum Debuggen mit dem System hinzuzufügen. out.print, aber im Testergebnisfenster wurde nichts angezeigt (ich verwende vscode). schlechtes Englisch