【Java高级技术】单元测试——概述和快速入门
单元测试——概述和Junit框架快速入门
1.概述
-
就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试
-
可以用来对方法进行测试,它是第三方公司开源出来的(很多开发工具已经集成了Junit框架,比如IDEA)
-
优点
(1)可以灵活的编写测试代码,可以针对某个方法执行测试,也支持意见完成对全部方法的自动化测试,且各自独立
(2)不需要程序员去分析测试的结果,会自动生成测试报告出来
2.快速入门
需求:某个系统有多个业务方法,请使用Junit单元测试框架,编写测试代码,完成正确性测试
具体步骤
- 因为IDEA已经集成了Junit,所以不需要手动导入
- 为需要测试的业务类定义对应的测试类,并为每个业务方法编写测试方法(测试方法必须公共,无参,无返)
- 测试方法上必须声明@Test注解,在测试方法中,调用被测试的业务方法
- 开始测试:选中测试方法(附近位置)右键运行代码,如果通过控制台显示绿色,失败显示红色
字符串工具类:
public class StringUtil {
//功能:打印字符串长度
public static void printNumber(String name){
//发现错误,加入判断
if(name == null){
System.out.println(0);
return;
}
System.out.println("名字长度是:" + name.length());
}
//功能:求字符串最大索引
public static int getMaxIndex(String data){
if(data == null){
return -1;
}
//return data.length(); //这里逻辑有问题!但是没有出现异常
return data.length() - 1;
}
测试类:
public class StringUtilTest {
@Test
public void testPrintNumber(){
//在测试方法中,调用被测试的方法即可
StringUtil.printNumber("admin"); //名字长度是:5
StringUtil.printNumber(null);
}
@Test
public void testGetMaxIndex(){
System.out.println(StringUtil.getMaxIndex(null)); //-1
int index = StringUtil.getMaxIndex("admin");
Assert.assertEquals("逻辑错误", 4 ,index);
System.out.println(index);
}
}
测试方法必须公共、无参、无返
断言机制:程序编写者可以预测程序运行的结果,使用Assert类的静态方法assertEquals
public static void assertEquals(String 错误提示, long 预期值, long 实际值);
3.Junit单元测试框架的常用注解(Junit 4.xxxx版本)
注解 | 说明 |
---|---|
@Test | 测试类中的方法必须用它修饰才能成为测试方法,才能启动执行 |
@Before | 用来修饰一个实例方法,该方法会在每一个测试方法执行之前执行一次 |
@After | 用来修饰一个实例方法,该方法会在每一个测试方法执行之后执行一次 |
@BeforeClass | 用来修饰一个静态方法,该方法会在所有测试方法之前只执行一次 |
@AfterClass | 用来修饰一个静态方法,还方法会在所有测试方法之后只执行一次 |
测试类:
public class StringUtilTest {
@BeforeClass
public static void beforeClass(){
System.out.println("-------- beforeClass修饰static方法,会在所有测试方法之前,执行一次 --------");
}
@AfterClass
public static void afterClass(){
System.out.println("-------- afterClass修饰static方法,会在所有测试方法之后,执行一次 --------");
}
@Before //初始化数据
public void before(){
System.out.println("-------- before修饰实例方法,会在每一个测试方法之前,执行一次 --------");
}
@After //释放资源
public void after(){
System.out.println("-------- after修饰实例方法,会在每一个测试方法之后,执行一次 --------");
}
@Test
public void TestPrintNumber() {
StringUtil.printNumber("admin");
}
@Test
public void TestGetMaxIndex() {
int index1 = StringUtil.getMaxIndex(null);
System.out.println(index1);
int index2 = StringUtil.getMaxIndex("admin");
System.out.println(index2);
Assert.assertEquals("方法有逻辑错误", 4, index2);
}
}
- 在测试方法之前执行的,常用来初始化资源
- 在测试方法之后执行的,常用来释放资源