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/>在获取的配置文件里加上该注解就可以解决问题
{{ cmt.username }}
{{ cmt.content }}
{{ cmt.commentDate | formatDate('YYYY.MM.DD hh:mm') }}