MockMvc如何用注解注入创建Mockmvc

hl.wang

发布于 2018.10.19 22:28 阅读 2392 评论 0

前言

今天师兄给讲解了不用注解注入如何用mockmvc测试,回来之后研究了一下用注解注入的方式发现注解注入更方便,不需要区别各种情况。

问题:

那如何用注解来创建一个mockmvc呢是不是会更方便呢?

分析:

既然用注解获取到mockmvc那么肯定不需要通过以下形式创建一个Controller对象来创建mock那应该如何创建呢?

private LoginController loginController;
loginController=applicationContext.getBean(LoginController.class);
mockMvc = MockMvcBuilders.standaloneSetup(loginController).build();

解决:

所需依赖:

<dependency> 
    <groupId>org.springframework</groupId> 
    <artifactId>spring-test</artifactId> 
    <version>${spring.version}</version> 
    <scope>test</scope> 
</dependency
> 

被测试的controller:

@Controller
@SuppressWarnings("SpringJavaAutowiringInspection")
@RequestMapping("front")
public class LoginController {
    @Resource
    UserService userService;
     /**
     * 登录页面
     * @param username,password 账号和密码
     * @return 返回登录结果信息
     */
    @RequestMapping(value ="/login",method = RequestMethod.POST)
    @ResponseBody
    public JsonResult getLogin(@RequestParam String username,@RequestParam String password){
        UserExample userExample=new UserExample();
        JsonResult jsonResult=new JsonResult();
        int n=userService.selectByNameAndPassword(username,password,userExample);
        if(n>0){
            jsonResult.setSuccess(true);
        }else {
            jsonResult.setSuccess(false);
            jsonResult.setFailReason("登录失败");
        }
            return jsonResult;
    }

 测试类:

@RunWith(SpringJUnit4ClassRunner.class)// 表示使用Spring Test组件进行单元测试
@ContextConfiguration(locations = {"classpath:spring/applicationContext.xml"})//加载配置文件
@WebAppConfiguration// 使用这个Annotate会在跑单元测试的时候真实的启一个web服务,然后开始调用Controller的Rest API,待单元测试跑完之后再将web服务停掉;
public class ArticleControllerTest {
   @Resource
    protected WebApplicationContext wac;
    private MockMvc mockMvc;
    @Before
    public void setUp() throws Exception {
    mockMvc= MockMvcBuilders.webAppContextSetup(wac).build();
    }
    @After
    public void tearDown() throws Exception {}
    @Test
    public void insertArticle() throws Exception {
    mockMvc.perform(post("/front/login")//构造一个post请求
            .param("username","112233")//添加请求参数
             .param("password","123"))
            .andDo(print());//打印请求和响应信息
    }

 测试成功为:

如果报了406说明上面注解获取的配置文件里没有<mvc:annotation-driven/>在获取的配置文件里加上该注解就可以解决问题