单元测试学习笔记(一)
自动化测试
通过测试工具/编程模拟手动测试步骤,全自动半自动执行测试用例,对比预期输出和实际输出,记录并统计测试结果,减少重复的工作量。
单元测试
针对最小的单元测试,Java中就是一个一个的方法就是一个一个的单元,编写测试代码自动化进行正确性测试,得到测试报告
Junit单元测试框架
灵活编写测试代码,可以针对某个方法执行测试,也可一键全部执行测试,自动生成测试报告
使用步骤:
编写一个单独的测试类,对需要测试的类进行测试,为里面每个业务方法都编写测试方法
例子1:printNumber方法测试
类中方法如下:
public static void printNumber(String name) {System.out.println("名字长度是:"+name.length());}
测试代码如下
@Testpublic void testPrintNumber(){StringUtil.printNumber("小七");}
加上@Test注解,就可以在写好的代码任意位置右键,选择run执行测试代码,显示绿色即测试成功,输出实际测试结果,但下面这个测试用例太简单,没考虑特殊情况
再加一个为空的情况测试
@Testpublic void testPrintNumber(){StringUtil.printNumber("小七");//第一句正常执行StringUtil.printNumber(null);//第二句报错}
如下图,第一句正常执行,第二句异常,说明这次测试有水平,成功测试出了bug,然后就需要在原来的类中修改逻辑,完善逻辑
原类中方法修改后:
public static void printNumber(String name) {if(name==null){System.out.println(0);return;}System.out.println("名字长度是:"+name.length());}
再次测试成功通过:
例子2:getMaxIndex方法测试
方法:
public static int getMaxIndex(String data) {if(data==null){return -1;}return data.length();}
测试:
@Testpublic void testGetMaxIndex(){int index1 = StringUtil.getMaxIndex(null);System.out.println(index1);int index2 = StringUtil.getMaxIndex("天青色等烟雨");System.out.println(index2);}
测试结果如下
实际上这个方法是错的,因为方法的目的是为了得出字符串最大的索引,但是现在输出的是字符串的长度,因此该方法需要修改Bug,但是现在写的这种测试就分析不出bug只能分析代码有没有异常,所以引出单元测试最核心的功能之一:断言机制
断言机制
用junit提供的Assertions里面的assertEquals方法对于index2"天青色等烟雨"的索引进行判断
代码:
@Testpublic void testGetMaxIndex(){int index2 = StringUtil.getMaxIndex("天青色等烟雨");System.out.println(index2);Assertions.assertEquals(5,index2,"方法内部有Bug!");}
测试结果:
改变方法使其正确:
public static int getMaxIndex(String data) {if(data==null){return -1;}return data.length()-1;//增加-1}
再次运行:
之所以叫自动化测试,因为写完代码一运行就可以测试出结果