MockMvc Sp​​ring boot rest call预期状态:<200>但原为:<500>

时间:2019-07-23 05:24:32

标签: junit5 spring-boot-test

当我尝试测试MockMvc的get请求时,我得到的状态码是500,而不是200。

我的控制器类是:

@RestController
@RequestMapping(path = "/product")
public class ProductController {

    @Autowired
    ProductService productService;

    @GetMapping("/all")
    public List<Product> getProductList() {
        return productService.getProductList();
    }
}

我的测试课是:

@SpringBootTest(classes = {ProductController.class, ProductService.class})
@AutoConfigureMockMvc
@ExtendWith(SpringExtension.class)
public class ProductControllerTest {

    @Autowired 
    private MockMvc mockMvc;

    @MockBean
    private ProductService productService;

    @Test
    @DisplayName("Get Product List REST API ")
    void getProductList() throws Exception {
        MvcResult result =
        mockMvc.perform(
        MockMvcRequestBuilders.get("/product/all") 
        .contentType(IntegrationTestUtil.APPLICATION_JSON_UTF8))
        .andExpect(status().isOk())
        .andReturn();


        String resultDOW = result.getResponse().getContentAsString();

        assertNotNull(resultDOW);
    }
}

当我运行测试用例时,我得到一个错误java.lang.AssertionError:预期状态:<200>但是:<500>

1 个答案:

答案 0 :(得分:0)

您的测试失败,因为在SpringBootTest配置中缺少正确的HttpMessageConverter,也许还有其他...

我认为正确的方法是使用WebMvcTest:

@WebMvcTest(controllers = ProductController.class)
@AutoConfigureMockMvc
class ApiTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private ProductService productService;

    @Test
    void someApiTest() {

    }

}

因此,测试MVC级别所需的全部内容都由@WebMvcTest注释收集,这可确保为此目的进行正确的上下文配置。