项目中我们经常要进行测试,我们可以写System.out.println();语句或者main方法进行测试,但是 当类的数量很多的时候,比如达到几百个类的时候,每个类中都写一个main方法进行测试的话,测试的效率会很低,比如不能一起运行,大多数情况下要人为地观察输出是否正确。
我们开发的项目成本最高的阶段是维护阶段,进行单元测试可应付将来的实现变化,另外,还能告诉开发组的其他成员,我开发的功能没有错误。
如何建立Junit测试呢,首先建立一个类,比如com.xuan.junit包下的T类,如下所示:
package com.xuan.junit;
public class T {
public int add(int x,int y){
return x+y;
}
}
一般在com.xuan.junit包下建立test包,即com.xuan.junit.test包,建立的测试类一般起名:类名Test,如上面的类则起名:TTest。
在这个com.xuan.junit.test包下新建一个Junit Test Case,如下:
package com.xuan.junit.test;
import org.junit.Test;
import static org.junit.Assert.*;
import com.xuan.junit.T;
public class TTest {
@Test
public void testAdd() {
int z=new T().add(5,3);
/*assertEquals(8, z);
assertTrue(z>3);
assertTrue("z too small",z>10);//字符串是提示用的
*/
/*assertThat(z, is(8));*/
}
}
当然你建立的时候要引入Junit4的Jar包,在这里,可以用Eclipse或者MyEclipse自带的jar包,在建立Junit Test Case的时候会有提示你添加Jar包的。
当测试的时候可以直接点击某个类或者某个类中的方法,右键选择“Run As”-》“Junit Test”,运行的时候如果没有错误就会出现绿色的条形,如果编译不通过出现错误就会显示红色的条形。
使用hamcrest断言,要导入相应的Jar包,主要上网下载,使用assertThat的匹配代码如下:
assertThat( n, allOf(greaterThan(1), lessThan(15) ) );
assertThat( n, anyOf( greaterThan(16), lessThan(8) ) );
assertThat( n, anything() );
assertThat( str, is( "bjsxt" ) );
assertThat( str, not( "bjxxt" ) );
assertThat( str,containsString( "bjsxt" ) );
assertThat( str, endsWith("bjsxt" ) );
assertThat( str, startsWith( "bjsxt" ) );
assertThat( n, equalTo( nExpected ) );
assertThat( str, equalToIgnoringCase( "bjsxt" ) );
assertThat( str, equalToIgnoringWhiteSpace( "bjsxt" ) );
assertThat( d, closeTo( 3.0, 0.3) );
assertThat( d, greaterThan(3.0) );
assertThat( d, lessThan (10.0) );
assertThat( d, greaterThanOrEqualTo (5.0) );
assertThat( d, lessThanOrEqualTo (16.0) );
assertThat( map, hasEntry("bjsxt", "bjsxt" ) );
assertThat( iterable, hasItem ( "bjsxt" ) );
assertThat( map, hasKey ( "bjsxt" ) );
assertThat( map, hasValue ( "bjsxt" ) );
这里需要解释下Failure和Error的区别:Failure是指程序中断言的结果与运行的结果不符,即测试失败,而Error则是测试的程序本身出错。
另外附上有关于Junit4的Annotation:
1. @Test: 测试方法
a) (expected=XXException.class)
b) (timeout=xxx)
2. @Ignore: 被忽略的测试方法
3. @Before: 每一个测试方法之前运行
4. @After: 每一个测试方法之后运行
5. @BeforeClass: 所有测试开始之前运行
6. @AfterClass: 所有测试结束之后运行
也可以选择同时运行多个测试类,选择“run configuration”,然后就可以在里面选择要运行的类或者方法。