Warum erhalte ich diesen Fehler? java.lang.AssertionError: JSON path „$“ Erwartet: eine Sammlung mit der Größe <3>, aberJava

Java-Forum
Guest
 Warum erhalte ich diesen Fehler? java.lang.AssertionError: JSON path „$“ Erwartet: eine Sammlung mit der Größe <3>, aber

Post by Guest »

Ich versuche zum ersten Mal, einen Test für meine API zu schreiben und erhalte diesen Fehler
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)));

}

}

und das ist mein Controller

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);
}

}

Vielen Dank im Voraus
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

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post