Почему я получаю эту ошибку java.lang.AssertionError: путь JSON "$" Ожидалось: коллекция с размером <3>, но: размер коллJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Почему я получаю эту ошибку java.lang.AssertionError: путь JSON "$" Ожидалось: коллекция с размером <3>, но: размер колл

Сообщение Anonymous »

Я впервые пытаюсь написать тест для своего API и получаю эту ошибку
java.lang.AssertionError: JSON path "$" Ожидалось: коллекция размером , но: размер коллекции был . Я протестировал свой API с помощью openApi, и он работал нормально.
вот мой код
UserControllerTest.java

Код: Выделить всё

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","laur@pinz.com" );
User USER_2 = new User(2L ,"Petru","Gologan","petru@gologan.com" );
User USER_3 = new User(3L ,"Luca","Pinzaru","luca@pinz.com" );

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

}

}

а это мой контроллер

Код: Выделить всё

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

}

Заранее спасибо
Я пытался использовать UserRepository напрямую, но получил другую ошибку, затем попытался добавить журналы для отладки системы. out.print, но в окне результатов теста ничего не появилось (я использую vscode)
P.S я новичок в Spring и этом типе программирования))
и извините за мое плохой английский

Подробнее здесь: https://stackoverflow.com/questions/793 ... expected-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»