其实单元测试很简单,并没有想象中那么复杂
首先需要学习Junit的使用,这是单元测试中最基本的内容,用于验证代码的返回值与自己设想的值是否是相同的。
举例最简单的方法:
public int add(int a,int b){
return a+b;
}
这个方法在简单不过了,很多人都可能认为不需要测试,很自信,
首先你要和上述一样,在test文件夹下创建一个测试了,
这个测试类要注意以下三个注解:
@Test:最重要的注解,表示这是一个测试方法,只有存在这个注解的时候,测试类里面的这个方法才会被执行。不被注解就不会被执行。
@Before:初始化变量,有些变量需要被初始化的时候,就可以在被这个注解的方法下进行初始化
@After:释放资源,比如开始初始化的资源,需要在这个测试类完成之后进行释放
如上图所示:Junit只认这个三个注解,不认注解的方法名称,这里需要注意的。
示例如下:
其实这里有两个测试方法,可以看到两个名称。
@After
public void after(){
unitTest=null;
System.out.print(" @After注解最后执行 \n");
}
@Before
public void before(){
unitTest=new UnitTest();
System.out.print("@Before注解首先执行 \n");
}
@Test
public void addition_isCorrect() {
assertEquals(4, 2 + 2);
System.out.print(" @Test多次执行 \n");
}
@Test
public void addTest(){
assertEquals(4, unitTest.add(2,2));
System.out.print(" @Test多次执行 \n");
}
上述是整体的代码:
上述是执行整个单元测试的效果,这就是为什么有 @After注解,因为每个单元测试都是独立的,不依赖任何别的任何测试的结果,因为被@Test的测试方法顺序不一定是按照你写的测试方法顺序执行。
每次都执行初始化容易造成内存被占用太多,所以最后要被释放。
assert 类
这个类是进行判断的类,可以将两个结果进行判断。
assertEquals(expected, actual),第一个参数是预期值,第二个参数是实际结果。
有很多方法:
assertEquals(expected, actual):判断是否一致,如果expected和actual一致的话测试通过
assertEquals(expected, actual, tolerance):这里传入的expected和actual是float或double类型的,因为传入的是float或者double类型的,所以最后一个参数是误差值。
assertTrue(boolean condition):验证contidion的值是true
assertFalse(boolean condition):与assertTrue相反,验证contidion的值是false
assertNull(Object obj):验证obj的值是null
assertNotNull(Object obj):与上述相反,验证obj的值不是null
assertSame(expected, actual):验证expected和actual是同一个对象,即指向同一个对象
assertNotSame(expected, actual):验证expected和actual不是同一个对象,即指向不同的对象
一般情况下里面是有两个参数的,事实上还可以有三个参数,
最后一个参数是误差值,是预期结果和实际结果的比较,不能大于误差值。
其他的一些:
@Test(expected = NullPointerException.class),在注解中加入expected可以判断是否会有异常,可以判断是否有空指针异常等异常。
@Test(timeout = 10000) 在注解中加入timeout,判断方法执行的操作时间。
@BeforeClass: 方法必须必须要是静态方法(static 声明),所有测试开始之前运行,注意区分@Before,是所有测试方法
@AfterClass: 方法必须要是静态方法(static 声明),所有测试结束之后运行,注意区分 @After
@Ignore: 被忽略的测试方法:这个方法是为了假如有些方法被废弃了或者修改过,不再适合以前的测试方法,就可以加上这个注解。