我有一个Spring Boot REST应用程序。所有GET请求的单元测试都运行良好;但是,POST请求都返回
define("ace/theme/monokai",["require","exports","module","ace/lib/dom"], function(require, exports, module) {
这是控制器:
java.lang.AssertionError: Content type not set
我的单元测试是:
@RestController
public class ClassificationController {
private IClassificationService classificationService;
@Autowired
public ClassificationController(IClassificationService classificationService) {
this.classificationService = classificationService;
}
@RequestMapping(value="/category", method = RequestMethod.POST, produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
@ResponseStatus(HttpStatus.CREATED)
@ResponseBody
public CategoryDTO createCategory(@RequestBody final CategoryDTO category) throws MctException {
return classificationService.createCategory(category);
}
我也尝试使用CategoryDTO对象而不是String jsonTask,结果相同。
答案 0 :(得分:1)
我发现它只是失败了,因为它是第一个,但它只是没有从端点返回任何东西。我正在返回内容类型,因为它返回正在插入的对象,因此内容类型有效。我最后改变了我的测试使用ObjectMapper创建内容JSON,然后我必须在我的域对象上添加一个equals方法....一旦我添加了equals方法,测试就通过了。我没有意识到模拟框架使用了该方法。
@Test
public void createClassTest() throws Exception {
String jsonInString = objectMapper.writeValueAsString(singleClass);
when(classificationService.createClass(5, singleClass)).thenReturn(singleClass);
MvcResult result = mockMvc.perform(post("/class/5")
.contentType(MediaType.APPLICATION_JSON_UTF8)
.content(jsonInString))
.andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8))
.andExpect(content().string(containsString("\"id\":1")))
.andExpect(content().string(containsString("\"className\":\"Test Class Name 1\"")))
.andExpect(status().isCreated())
.andReturn();
verify(classificationService).createClass(5, singleClass);
}
答案 1 :(得分:0)
根据断言错误判断,端点似乎没有返回MediaType.APPLICATION_JSON_UTF8。尝试删除contentType检查或调试,并查看端点实际返回的内容。再一次,根据您看到的错误判断,似乎根本没有返回任何内容类型。所以你应该检查没有设置内容类型。
我通常知道我通常测试的POST请求根本不会返回contentType。
毕竟,如果您希望设置内容类型,那么端点实际上可能是在做错了。