什么是Junit
是Java语言编写第三方单元测试框架。
什么是单元测试
在Java中一个类就是一个单元。 单元测试是开发者编写的一小段代码用来测试某个类中的某个方法的功能或业务逻辑是否正确。
Junit的作用
可以帮助我们对类中的方法进行测试,最大限度避免出现bug,保证程序的稳定性和正确性。 可以让一个方法独立运行,这个方法测试方法
Junit的使用步骤
编写业务类(StudentDao):实现方法功能 编写测试类:命名规则:以Test开头,后面跟业务类名,比如:TestStudentDao 编写测试方法
测试方法的要求
方法声明要求 * 方法必须是public修饰,没有返回值,没有参数。 * 方法声明上必须使用注解: 命名规则 * 以test开发,以被测试的方法结尾,使用驼峰命名法 * 比如:要测试save,则测试方法的名称:testSave
如何运行测试方法
选中方法名:右键 --> Run As --> Junit Test 执行选中的方法 选中类名:右键 --> Run As --> Junit Test 执行类中的所有测试方法 选中项目名:右键 --> Run As --> Junit Test 执行项目中的所有类中的所有测试方法
如何查看测试结果
绿色:表示测试通过。 红色:表现测试失败。
Junit常用注解
修饰测试方法 : * :在每一个测试方法执行之前执行一次 * :在每一个测试方法执行之后执行一次 * : 修饰静态方法,在所有测试方法执行之前执行一次。 * : 修饰静态方法,在所有测试方法执行之后执行一次。
示例代码
设置一个类Calculator,包含4个方法:加、减、乘、除,使用JUnit对4个方法进行单元测试
在每个方法运行之前创建Calculator对象,在方法运行完毕以后将对象设置为null
/** 业务类 */ public class Calcuate { public int add(int a,int b){ return a+b; } public int subtract(int a,int b){ return a-b; } public int multiply(int a,int b){ return a*b; } public int divide(int a,int b){ return a/b; } }
public class CalcuateTest { Calcuate calcuate; public void init() { if (calcuate == null) { calcuate = new Calcuate(); } } public void close() { calcuate = null; } public void testAdd() { int result = calcuate.add(2, 3); // 预测返回是true,如果不是true,则抛异常。 /* 断言:预先判断某个条件一定成立,如果不成立,则直接奔溃。 messsage: 异常的提示信息 expected:期望值 actual:实际值 */ Assert.assertEquals("加法有问题", 5, result); } public void testSubtract() { int result = calcuate.subtract(12, 2); // 故意设置减法期望值为10000 Assert.assertEquals("减法有问题", 10000, result); } public void testMultiply() { int result = calcuate.multiply(2, 3); Assert.assertEquals("乘法有问题", 6, result); } public void testDivide() { int result = calcuate.divide(6, 3); Assert.assertEquals("除法有问题", 2, result); } }
assert类中的assert方法总结
1.assertTrue/False(String message,boolean condition); 判断一个条件是true还是false。 2.fail([String message,]); 失败,可以有消息,也可以没有消息。 3.assertEquals(String message,Object expected,Object actual); 判断是否相等,可以指定输出错误信息。 第一个参数是期望值,第二个参数是实际的值。 这个方法对各个变量有多种实现。 4.assertNotNull/Null(String message,Object obj); 判读一个对象是否非空(非空)。 5.assertSame/NotSame(String message,Object expected,Object actual); 判断两个对象是否指向同一个对象。看内存地址。 7.failNotSame/failNotEquals(String message, Object expected, Object actual) 当不指向同一个内存地址或者不相等的时候,输出错误信息。 注意信息是必须的,而且这个输出是格式化过的。