美文网首页spring boot 学习笔记
spring boot 编写单元测试

spring boot 编写单元测试

作者: wnyto | 来源:发表于2018-05-18 15:01 被阅读53次

    1.开始之前

    • IDE:Intellij idea
    • 依赖jar包 : spring-boot-starter-test
    1. 生成测试类
      快捷方式:鼠标移动到要测试的类上 按下 alt+enter
      需要的注解:
    @RunWith(SpringRunner.class)
    @SpringBootTest
    @Test
    

    ex:

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class ClassServiceTest { 
      @Test
        public void addInfo()
        {
        }
    }   
    

    3.使用断言assertThat
    assertThat 基本语法

    assertThat( [value], [matcher statement] );

    • value 是接下来想要测试的变量值;
    • matcher statement 是使用 Hamcrest 匹配符来表达的对前面变量所期望的值的声明,如果 value 值与 matcher statement 所表达的期望值相符,则测试成功,否则测试失败。
    1. Hamcrest 匹配符
      API:http://hamcrest.org/JavaHamcrest/javadoc/2.0.0.0/

    5.Controller单元测试
    上面只是针对Service层做测试,但是有时候需要对Controller层(API)做测试,这时候就得用到MockMvc了,你可以不必启动工程就能测试这些接口。

    MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。

    Controller类:

    package com.dudu.controller;
    
    /** 教程页面
     * Created by tengj on 2017/3/13.
     */
    @Controller
    @RequestMapping("/learn")
    public class LearnController  extends AbstractController{
        @Autowired
        private LearnService learnService;
        private Logger logger = LoggerFactory.getLogger(this.getClass());
    
        @RequestMapping("")
        public String learn(Model model){
            model.addAttribute("ctx", getContextPath()+"/");
            return "learn-resource";
        }
    
        /**
         * 查询教程列表
         * @param page
         * @return
         */
        @RequestMapping(value = "/queryLeanList",method = RequestMethod.POST)
        @ResponseBody
        public AjaxObject queryLearnList(Page<LeanQueryLeanListReq> page){
            List<LearnResource> learnList=learnService.queryLearnResouceList(page);
            PageInfo<LearnResource> pageInfo =new PageInfo<LearnResource>(learnList);
            return AjaxObject.ok().put("page", pageInfo);
        }
    
        /**
         * 新添教程
         * @param learn
         */
        @RequestMapping(value = "/add",method = RequestMethod.POST)
        @ResponseBody
        public AjaxObject addLearn(@RequestBody LearnResource learn){
            learnService.save(learn);
            return AjaxObject.ok();
        }
    
        /**
         * 修改教程
         * @param learn
         */
        @RequestMapping(value = "/update",method = RequestMethod.POST)
        @ResponseBody
        public AjaxObject updateLearn(@RequestBody LearnResource learn){
            learnService.updateNotNull(learn);
            return AjaxObject.ok();
        }
    
        /**
         * 删除教程
         * @param ids
         */@Test
    @Transactional
    public void add(){
        LearnResource bean = new LearnResource();
        bean.setAuthor("测试回滚");
        bean.setTitle("回滚用例");
        bean.setUrl("http://tengj.top");
        learnService.save(bean);
    }
        @RequestMapping(value="/delete",method = RequestMethod.POST)
        @ResponseBody
        public AjaxObject deleteLearn(@RequestBody Long[] ids){
            learnService.deleteBatch(ids);
            return AjaxObject.ok();
        }
    
        /**
         * 获取教程
         * @param id
         */
        @RequestMapping(value="/resource/{id}",method = RequestMethod.GET)
        @ResponseBody
        public LearnResource qryLearn(@PathVariable(value = "id") Long id){
           LearnResource lean= learnService.selectByKey(id);
            return lean;
        }
    }
    

    6.单元测试回滚

    单元个测试的时候如果不想造成垃圾数据,可以开启事物功能,记在方法或者类头部添加@Transactional注解即可,如下:

    @Test
    @Transactional
    public void add(){
        LearnResource bean = new LearnResource();
        bean.setAuthor("测试回滚");
        bean.setTitle("回滚用例");
        bean.setUrl("http://tengj.top");
        learnService.save(bean);
    }
    

    相关文章

      网友评论

      本文标题:spring boot 编写单元测试

      本文链接:https://www.haomeiwen.com/subject/kwegdftx.html