首页 > 解决方案 > 春季测试 mockmvc 实际:500 预期:200

问题描述

我想知道我做错了什么测试,尽管遵循教程和 SO 主题,我根本无法进行测试。

这是我的代码,它给了我一个预期的 200 收到:500,如果有人能指出我一个很好的测试资源,我将不胜感激,因为我找不到一个给出工作示例的资源,或者告诉我我不是哪个基本原则掌握我应该重点关注的地方。

@ExtendWith(SpringExtension.class)
@AutoConfigureMockMvc
@SpringBootTest
@WebMvcTest(controllers = UserController.class)
public class UserControllerTest {
    @Autowired
    private MockMvc mockMvc;

    ObjectMapper objectMapper = new ObjectMapper();

    @MockBean
    private User user;

    @MockBean
    private UserService userService;

    @Mock
    private UserRepository userRepository;

    @Before
    public void setup() throws Exception {
        mockMvc = MockMvcBuilders.standaloneSetup(new UserController()).build();  //Construct MockMVC
    }


    @Test
    public void whenValidInput_thenReturns200() throws Exception {
        Cart cart = Cart.builder().build();
        Date birthdate = new Date(1978-06-06);
        ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
        User user = new User(1231231231231L, "Denis", "Pierre", "pierre@hotmail.com", "pass", "adresse", birthdate, cart);
        String json = ow.writeValueAsString(user);
      
        when(
        mockMvc.perform(post("/api/users/register/", user)
                .contentType(MediaType.APPLICATION_JSON)
                .content(objectMapper.writeValueAsString(user))
                .accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk()));

    }

}

这是电影控制器

  @PostMapping("/users/register")
    public ResponseEntity<User> registerUser(@RequestBody User user) {
        try {
            Optional<User> userData = userService.findByEmail(user.getEmail());
            if (userData.isPresent()) {
                // existing email, cannot register
                return new ResponseEntity<>(null, HttpStatus.CONFLICT);
            } else {
                userService.saveUser(user);
                return new ResponseEntity<>(HttpStatus.OK);
            }
        } catch (Exception e) {
            return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

这是我得到的确切错误消息:

11:51:58.389 [main] DEBUG org.springframework.web.servlet.mvc.method.annotation.HttpEntityMethodProcessor - Nothing to write: null body
11:51:58.392 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - Completed 500 INTERNAL_SERVER_ERROR

标签: springmodel-view-controllerjunitmocking

解决方案


推荐阅读