当使用MockMvc测试控制器时,发生参数传递错误

问题描述 投票:-1回答:1

我正在使用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进行单元测试。

spring unit-testing spring-mvc testng mockmvc
1个回答
0
投票

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

 MvcResult mvcResult = mockMvc.perform(
                post("/API/scanresultconfigure/queryScanResultList/{taskId}/{externalname}", "123", "abc")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(requestJson)
        )
                .andExpect(status().isOk())
                .andDo(print())
                .andReturn();
© www.soinside.com 2019 - 2024. All rights reserved.