当我尝试测试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>
答案 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
注释收集,这可确保为此目的进行正确的上下文配置。