mrtian367 2019-04-28 16:39 采纳率: 0%
浏览 3977
已采纳

spring boot 使用MockMvc进行单元测试,响应返回一直404

下面是相关代码:
controller层

@RestController
@RequestMapping("/studentTest/")
public class StudentControllerTest {

@Autowired
private StudentDao studentDao;

@RequestMapping(value = "insertStudent.html",method = RequestMethod.POST,produces = {MediaType.APPLICATION_JSON_UTF8_VALUE})
public String insertStudent(@RequestParam("name") String name, @RequestParam("age") String age, @RequestParam("sex") String sex){
    Student stu = new Student();
    System.out.println(UUID.randomUUID().toString());
    stu.setId(UUID.randomUUID().toString());
    stu.setName(name);
    stu.setAge(age);
    stu.setSex(sex);
    studentDao.insertStudent(stu);

    return "success";

}

}

测试类:
@RunWith(SpringRunner.class)
@SpringBootTest
@ComponentScan(basePackages = "com.tjf.learn")
public class Demo1ApplicationTests {

private MockMvc mockMvc;

@Before
public void initMockMvc (){
    this.mockMvc = MockMvcBuilders.standaloneSetup(new IndexController()).build();
}

@Test
public void insertStudent  () throws Exception{
    RequestBuilder rb = MockMvcRequestBuilders.post("/studentTest/insertStudent.html")
            .param("name","张三")
            .param("age","20")
            .param("sex","1")
            .contentType(MediaType.APPLICATION_JSON_UTF8).accept(MediaType.APPLICATION_JSON_UTF8);
    mockMvc.perform(rb)
           // .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andReturn().getResponse().getContentAsString();
}
}


求哪位大神解决一下
  • 写回答

1条回答 默认 最新

  • mrtian367 2019-05-14 15:54
    关注

    终于知道什么原因了。
    今天无意之间看见了@AutoConfigureMockMvc这个注解,这个注解是用于自动配置MockMvc,我就放在测试类的上面添加了这个注解,无意之间也注意到了这段代码
    private MockMvc mockMvc;

    @Before
    public void initMockMvc (){
    this.mockMvc = MockMvcBuilders.standaloneSetup(new IndexController()).build();
    }
    这是注入了一个独立的IndexContoller对应的路由的MockMvc,所以这个路由下的测试能够通过,其他路由就会一直报404的状态码。错误的原因就在这里

    添加了注解@AutoConfigureMockMvc配合上@Autowired就可以自动的注册所有添加@Controller或者@RestController的路由的MockMvc了

    这里真的是自己的问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?