java.lang.AssertionError:即使将内容类型设置为json / application,也未设置内容类型

时间:2016-05-25 22:15:35

标签: java spring spring-mvc spring-test

之前已经问过这个问题,我已经尝试了他们的解决方案,但这对我不起作用,我正在使用In[13]: temp Out[13]: `bytearray(b'\xd8[\xda[\xd8[\xda[\xd1[\xe1[\xeb[\xed[\xe7[\xeb[\xe7[\xea[\xd6[\xd5[\xd8[\xd5[\xd4[\xd3[\xe9[\xe2[\xe3[\xe5[\xe6[\xe8[\xdc[\xe6[\xe4[\xe4[\xe8[\xe2[\xd3[\xdb[\xd1[\xda[\xda[\xd7[\xd1[\xd1[\xdf[\xd1[\xd4[\xdd[\xe6[\xdd[\xe3[\xe4[\xdf[\xe1[\xd0[\xd4[\xd7[\xd6[\xd7[\xd4[\xdf[\xdd[\xe0[\xe5[\xe0[\xdf[\xe0[\xdd[\xdd[\xe3[\xdc[\xde[\xd8[\xe0[\xde[\xdf[\xde[\xe2[\xe7[\xe2[\xe2[\xea[\xe1[\xe0[\xda[\xd4[\xd9[\xdb[\xd9[\xdd[\xe1[\xe3[\xe3[\xe2[\xe3[\xe7[\xe1[\xe5[\xe2[\xe8[\xe4[\xe3[')` 来测试我的休息呼叫的内容类型。 我得到了这个例外:

  

java.lang.AssertionError:未设置内容类型

我正在使用MockMvc属性在我的搜索方法中设置它。

这是我初始化模拟的方法:

produces

这是我的测试方法:

@Before
public void init() {
    MockitoAnnotations.initMocks(this);
    ReflectionTestUtils.setField(restController, "luceneSearchEnabled", true);
    mockMvc = standaloneSetup(restController).build();
}

这是我设置内容类型的搜索方法:

@Test
public void pmmSearchContentTypeTest() throws Exception { 
    mockMvc
          .perform(get("/api/v1/pmm").contentType(MediaType.APPLICATION_JSON))
          .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON_VALUE)
          .andReturn();
}

我不知道这里有什么问题。

4 个答案:

答案 0 :(得分:4)

我遇到了同样的错误,发现这个控制器方法的模拟服务返回null。更改模拟服务方法以返回any()输入的值,并测试它以消除此错误。

when(service.method(any())).thenReturn(someElement);

someElement早于null导致此错误情况

答案 1 :(得分:1)

自己想出来

而不是在这里使用retcontroller的模拟对象

mockMvc = standaloneSetup(restController).build();

我不得不使用真实物体

mockMvc = standaloneSetup(new RestController()).build();

为了避免弹簧验证错误,我必须在这里使用完整路径

mockMvc
.perform(get("/api/v1/pmm/search{}").contentType(MediaType.APPLICATION_JSON))

答案 2 :(得分:0)

如果响应返回null,则可以得到该错误,如@ stuti-verma所述。 它现在发生在我身上。

案例:在我的测试中,我向控制器发送了一个json,但是我用来生成模拟响应的对象并没有实现equals / hashCode。所以,它永远不会与收到的json匹配。

@RequestBody anObject

mock.theMethod(anObject).thenReturn(theResponse)

anObject必须具有equals / hashCode才能进行比较

答案 3 :(得分:0)

就我而言,我必须在ResponseEntity本身中设置请求返回的内容类型:

PaymentResponse paymentResponse = makePaymentService.makePayment(paymentRequest);
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
return new ResponseEntity<>(paymentResponse, HttpStatus.OK);

请参阅java.lang.AssertionError: Content Type Not Set - Spring Controller JUnit Tests