【问题标题】:When using MockMvc to test the controller, a parameter passing error occurred使用MockMvc测试控制器时,出现参数传递错误
【发布时间】:2019-12-19 10:27:04
【问题描述】:

我正在使用 MockMvc 来测试控制器。关于参数导入,我遇到了类型不匹配的问题。我尝试了所有的 json 样式。但没有任何效果

这是我的控制器类::

package app.dnatask.controller;

import ......;

@Slf4j
@RestController
@RequestMapping(value = "/API/scanresultconfigure")

public class ScanResultConfigureController extends BaseController {
    @RequestMapping(value = "/queryScanResultList/{taskId}/{externalname}", method = RequestMethod.POST)
    public IBaseResult queryscanResultList(final HttpServletRequest request, @PathVariable final String taskId, @PathVariable final String externalname, @RequestBody Map map) throws Exception {
        return runController(new IControllRunner() {
            public void run(IOutResult or, CheckResult cr) throws Exception {
                ......
            }
        }
    }
}

这是我的测试课::

package app.dnatask.controller;

import ......

@WebAppConfiguration
@ContextConfiguration(classes = {ScanResultConfigureController.class})
@ComponentScan(
        includeFilters = {
                @ComponentScan.Filter(type = FilterType.CUSTOM,
                        value = {ScanResultConfigureController.class})
        },
        useDefaultFilters = false,
        lazyInit = true
)

public class ScanResultConfigureControllerTest extends AbstractTestNGSpringContextTests {
    @Autowired
    private WebApplicationContext webApplicationContext;
    private MockMvc mockMvc;

    @BeforeMethod
    public void setup() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).dispatchOptions(true).build();
        System.out.println("UT starting.............");
    }

    @AfterMethod
    public void am() {
        System.out.println("UT ending.............");
    }

    @Test
    public void testQueryscanResultList() throws Exception {
        Map<String, String> testMap = new HashMap<>();
        testMap.put("key1", "value1");
        testMap.put("key2", "value2");
        String requestJson = JSONObject.toJSONString(testMap);
        mockMvc.perform(
                post("/API/scanresultconfigure/queryScanResultList/001/abc")
                        .contentType(MediaType.APPLICATION_JSON)
                        .param("map", requestJson)
        )
                .andExpect(status().isOk())
                .andDo(print());
    }
}

错误信息::

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/json' not supported

java.lang.AssertionError: Status expected:<200> but was:<415>

这是一个springmvc框架实现的项目,我使用TestNG进行单元测试。

【问题讨论】:

  • 这种内容类型的json问题已经在本站被问过好几次了。
  • 谢谢你的提醒。之前我尝试搜索相关内容但没有找到合适的方法,可能是我没有搜索到正确的关键字,现在我找到了对应的解决方案。

标签: spring unit-testing spring-mvc testng mockmvc


【解决方案1】:

关于我的问题,解决方法如下::

 MvcResult mvcResult = mockMvc.perform(
                post("/API/scanresultconfigure/queryScanResultList/{taskId}/{externalname}", "123", "abc")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(requestJson)
        )
                .andExpect(status().isOk())
                .andDo(print())
                .andReturn();

【讨论】:

    猜你喜欢
    • 2016-12-15
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 2014-05-31
    • 1970-01-01
    相关资源
    最近更新 更多