以前有人问过这个问题,我已经尝试过他们的解决方案,但这对我不起作用,我正在使用MockMvc
来测试rest调用的内容类型。我得到了一个例外:
java.lang.AssertionError:内容类型未设置
当我使用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();
}
这是我的搜索方法,我在这里设置内容类型:
@RequestMapping(value = "/api/" + REST_API_VERSION + "/" + ONE_INTERFACE, method = RequestMethod.GET, produces ={MediaType.APPLICATION_JSON_VALUE})
@ResponseBody
public String pmmSearch() { ... }
我不知道这是怎么回事。
发布于 2016-10-23 13:10:13
我也遇到了同样的错误,并发现这个控制器方法的模拟服务返回null。更改模拟服务方法以返回任何()输入的值,并测试此方法以消除此错误。
when(service.method(any())).thenReturn(someElement);
someElement之前为null,导致此错误情况。
发布于 2016-06-24 03:00:44
我自己想出来的
而不是在这里使用retcontroller的模拟对象。
mockMvc = standaloneSetup(restController).build();
我不得不用一个真正的物体
mockMvc = standaloneSetup(new RestController()).build();
为了避免弹簧验证错误,我必须在这里使用完整的路径。
mockMvc
.perform(get("/api/v1/pmm/search{}").contentType(MediaType.APPLICATION_JSON))
发布于 2017-12-30 19:17:05
如果响应返回null,您可以得到该错误,如@stuti。现在就发生在我身上。
案例:在我的测试中,我向控制器发送了一个json,但是我用来生成模拟响应的对象并没有实现相等/hashCode。因此,它将永远不会与收到的json相匹配。
@RequestBody anObject
mock.theMethod(anObject).thenReturn(theResponse)
anObject必须具有等于/hashCode才能进行比较
https://stackoverflow.com/questions/37448548
复制相似问题