Content type error when mocking static method 模拟静态方法时的内容类型错误
Content type error when mocking static method 模拟静态方法时的内容类型错误
我正在尝试测试控制器中的一个方法。
如果我注释掉被该方法调用的静态方法中的逻辑,测试就会通过。
我不能将该逻辑注释掉,而是想要模拟它。现在模拟是有效的,
但我得到了一个新的错误,如下所示:
java.lang.AssertionError: 未设置内容类型
但是我确实设置了内容类型。请告诉我我做错了什么。
@Test public void testMethod() throws Exception{ // 如果我不模拟这个,测试将失败。 // 如果我不模拟并注释掉这个方法中的逻辑,测试通过。 // 如果我模拟这个,如果我不检查内容类型,测试通过。 // 我使用 Power Mockito。 mockStatic(MyStaticClass.class); doReturn("").when(MyStaticClass.class, "someMethod", any(Config.class), anyString()); //也尝试过这个,可行。 //when(MyStaticClass.someMethod(any(Config.class), anyString())).thenReturn(""); //如上所述,如果我注释掉 MyStaticClass 中的逻辑,这将起作用。 mockMvc.perform( get("/api/some/a/b/c/d").accept( MediaType.APPLICATION_JSON)) .andExpect(status().isForbidden()) .andExpect(content().contentType("text/html")); // 当我模拟时,我需要将此注释掉才能让测试工作。 } // Controller @RequestMapping(value = "/{a}/{b}/{c}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) // 我确实有内容类型 @ResponseBody public MyResponse getSomething( HttpServletRequest request, HttpServletResponse response, @PathVariable String a, @PathVariable String b, @PathVariable String c, @RequestParam(value = "some", required = false) String some) throws Exception { // 一些逻辑 // 调用静态方法 MyStaticClass.someMethod("sample", "sample2"); try { MyResponse myPageResponse = new MyResponse(anotherStr, someStr); // 它在这里中断并抛出错误消息。没有到达 return。 return MyResponse; } catch (NullPointerException npe) {} }
问题的出现原因是,在进行模拟静态方法时出现了内容类型错误。
解决方法是,首先,由于这是一个GET请求,它没有请求体,因此理想情况下,使用contentType("text/html")来指定内容类型头可能不是正确的方法。其次,在请求中指定的内容类型头必须与期望发送的值匹配,明确指出您希望发送的是text/html,但没有相应的支持。
理想情况下,GET请求没有请求体,因此内容类型不重要,但是即使您想要实现它,您也必须使用代码添加相应的内容类型(类似于您使用的produces),并在代码中实现。
建议阅读以下链接以了解更多信息:[stackoverflow.com/questions/5661596](https://stackoverflow.com/questions/5661596)
如果您觉得这个回答有用,请点赞并接受答案。谢谢!