首先在给自己的代码进行单元测试之前我们必须要了解单元测试究竟是个什么东西,首先一个正规的单元测试你需要有@Test,进行单例测试,然后需要使用Assert进行断言打印。
单元测试中的成功值测试,错误值测试,边界值测试,代码覆盖,路径覆盖又是个什么玩意儿,下面我们一个一个来。
首先讲解代码覆盖率:一个功能需要测多少次才算覆盖率100%这里举个例子
你写一个addUser添加用户的功能 字段name age 两个需要做多少次覆盖
1.要判断name中是否含有符号
2.判断是否为空
3.判断是否包含数字
这仅仅是一个字段的代码覆盖 然后年龄age
1.age是不是小于0
2.age是不是大于999
这也是代码覆盖率 简单的来说代码覆盖率就是看你的代码究竟能测出多少问题
代码覆盖率包括了 1.语句覆盖率 2.判定覆盖率 3.条件覆盖率
1.语句覆盖率: 举个例子
还是写一个addUser添加用户的功能 字段name age
第一次测试name给了需要的值但是age却是空的,这是一次语句覆盖
第二次测试name给了null值age给了需要的值,这又是一次语句覆盖
所以语句覆盖率简单来说就是你一个功能可以重复测试多少次
2.判定覆盖率
还是写一个addUser添加用户的功能 字段name age
这个其实可以基于语句覆盖率之上来进行,语句覆盖率需要重复写很多相关的代码有代码冗余
但是你把判定覆盖和语句覆盖结合在一起,就等于是在一次测试里面进行了多次判断
例如:if(name==null||name==“”){
(你想输出的东西)
} else if(age>999||age<0){
(你想输出的东西)
}
这就是判定覆盖率,你写了多少个判断就验证了你的这个功能的完整程度
3.条件覆盖率
还是写一个addUser添加用户的功能 字段name age这个就不需要举例子了简单来说就是
你一个字段可以进行多少种条件判断,比如name字段,你首先得判断不是空的,然后还得
判断name里面是不是含有数字,然后还得判断是不是带有英文,再就是判断是不是有特殊符号,
条件的多少证明的你的这个功能的漏洞的多与少。
这三个覆盖率我们统称为代码覆盖率然后继续讲解单元测试中的成功值测试
1.成功值测试
这个就非常简单了直接附上代码
/*成功测试*/ @Test public void saveUsetTestOk(){ User user = new User("dzsww",30); //转换成json格式的数据方便前端测试功能 String s = JSON.toJSONString(user); userController.saveUser(user); //使用断言来打印可以看到想要得到的信息 Assert.assertEquals("添加成功",200,s); }
简单来说就是把你写的功能填上正确的参数让他成功执行。
2.错误值测试
/*错误值测试*/ @Test void saveUsetTestNot(){ User user = new User("",0); //转换成json格式的数据方便前端测试功能 String s = JSON.toJSONString(user); System.out.println(s); if(user.getAge()<=0){ //使用断言来打印可以看到想要得到的信息 Assert.assertEquals("年龄最小为1岁",201,userController.saveUser(user)); }else if(user.getName()==""||user.getName()==null){ Assert.assertEquals("姓名不能为空",201,userController.saveUser(user)); } }
简单来说就是给你的这个功能填上错误的参数例如age<0,name=null等等~
3.边界值测试
/*边界值测试*/ @Test void saveUsetTestBJ(){ User user = new User("123",1000); //转换成json格式的数据方便前端测试功能 String s = JSON.toJSONString(user); System.out.println(s); //这是我写的一个正则表达式的封装非常简单,需要的小伙伴可以自行编写 Boolean special = Special.getSpecial(user.getName()); if(user.getAge()<=0||user.getAge()>999){ //使用断言来打印可以看到想要得到的信息 Assert.assertEquals("年龄超过了边界值",201,userController.saveUser(user)); }else if(user.getName()==""||user.getName()==null){ Assert.assertEquals("姓名为必填项",201,userController.saveUser(user)); }else if(special==true){ Assert.assertEquals("姓名中不能含特殊符号",201,userController.saveUser(user)); }else{ Assert.assertEquals("姓名中不能含数字",201,userController.saveUser(user)); } }
简单来说就是测试你这个字段最大值为多少,超过了这个值会出现什么问题。
一个好的单元测试应该站在用户的角度来考虑这是否合理,不合理就需要测试一次,每一次单元测试都是一次代码覆盖率的和路径覆盖率的提升,一个好的功能一定要有单元测试哦,希望大家明白单元测试并不只是测试人员的事情,对于后端开发人员来说功能写的是否完整就看你的单元测试写的怎么样,只有这样才能查漏补缺看出代码中的漏洞及时补救。