2014-05-09 17 views
14

Tôi đang thử nghiệm điểm cuối api hoạt động từ một áp phích http (cụ thể là PAW) nhưng tôi không thể kiểm tra mã để vượt qua.MockMVC và Mockito trả về Trạng thái mong đợi <200> nhưng là <415>

Tôi là người mới đối với cả Mockito và MockMVC nên mọi trợ giúp sẽ được đánh giá cao.

thử nghiệm dưới đây:

@Test 
public void createPaymentTest() throws Exception { 
    User user = new User("ben", "password", "[email protected]"); 

    SuccessResponseDTO successDTO = new SuccessResponseDTO(); 
    successDTO.setSuccess(true); 

    when(userService.getLoggedInUser()).thenReturn(user); 
    when(paymentService.makePayment(Mockito.any(PaymentRequestDTO.class), Mockito.any(User.class))).thenReturn(successDTO.getSuccess()); 

    this.mockMvc.perform(post("/payment")).andExpect(status().isOk()) 
      .andExpect(content().contentType(MediaType.APPLICATION_JSON)).andDo(MockMvcResultHandlers.print()) 
      .andExpect(jsonPath("$.success").value(successDTO.getSuccess())); 

} 

SuccessResponseDTO chỉ chứa một thuộc tính, một 'thành công' boolean.

Phương pháp đó là thử nghiệm là dưới đây:

@RequestMapping(value = "/payment", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) 
@ResponseBody 
public SuccessResponseDTO createPayment(@RequestBody PaymentRequestDTO payment) { 
    User loggedInUser = userService.getLoggedInUser(); 
    LOGGER.info("Logged in user found...creating payment..."); 

    Assert.notNull(payment.getAccountId(), "Missing user account id"); 
    Assert.notNull(payment.getPayeeAccountNumber(), "Missing payee acount number"); 
    Assert.notNull(payment.getPayeeName(), "Missing payee name"); 
    Assert.notNull(payment.getPayeeSortCode(), "Missing payee sort code"); 
    Assert.notNull(payment.getPaymentAmount(), "Missing payee amount"); 
    Assert.notNull(payment.getPaymentDescription(), "Missing payment description"); 

    Boolean paymentResult = paymentService.makePayment(payment, loggedInUser); 

    SuccessResponseDTO successResponse = new SuccessResponseDTO(); 

    successResponse.setSuccess(paymentResult); 

    return successResponse; 
} 

bất cứ ai có thể làm sáng tỏ về stack trace:

java.lang.AssertionError: Status expected:<200> but was:<415> 
at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:60) 
at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:89) 
at org.springframework.test.web.servlet.result.StatusResultMatchers$5.match(StatusResultMatchers.java:546) 
at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:141) 
at com.capco.living.controller.PaymentControllerTest.createPaymentTest(PaymentControllerTest.java:69) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

Trả lời

19

HTTP Error 415 Unsupported media type - có nghĩa là bạn gửi dữ liệu mà không được hỗ trợ bởi dịch vụ. Trong trường hợp này, điều đó có nghĩa là bạn không đặt tiêu đề Kiểu nội dung và nội dung thực trong yêu cầu. Tôi cho rằng nội dung JSON được mong đợi, vì vậy, cuộc gọi của bạn sẽ như sau:

this.mockMvc.perform(post("/payment").contentType(MediaType.APPLICATION_JSON) 
    .content("{\"json\":\"request to be send\"}")) 
    .andExpect(status().isOk()) 
    .and_the_rest_of_validation_part 
+0

Hoàn hảo, cảm ơn rất nhiều –

6

Bạn cũng có thể thiếu một số chú thích trên lớp điều khiển của mình. Đảm bảo bạn sử dụng @EnableWebMvc và @Controller

Kiểm tra this answer for details

Các vấn đề liên quan