之前已经问过这个问题,我已经尝试了他们的解决方案,但这对我不起作用,我正在使用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();
}
我不知道这里有什么问题。
答案 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