Content type error when mocking static method 模拟静态方法时的内容类型错误

8 浏览
0 Comments

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) {}
}

0
0 Comments

问题的出现原因是,在进行模拟静态方法时出现了内容类型错误。

解决方法是,首先,由于这是一个GET请求,它没有请求体,因此理想情况下,使用contentType("text/html")来指定内容类型头可能不是正确的方法。其次,在请求中指定的内容类型头必须与期望发送的值匹配,明确指出您希望发送的是text/html,但没有相应的支持。

理想情况下,GET请求没有请求体,因此内容类型不重要,但是即使您想要实现它,您也必须使用代码添加相应的内容类型(类似于您使用的produces),并在代码中实现。

建议阅读以下链接以了解更多信息:[stackoverflow.com/questions/5661596](https://stackoverflow.com/questions/5661596)

如果您觉得这个回答有用,请点赞并接受答案。谢谢!

0