一 概述
junit介绍
JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。
junit特性
JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。它包括以下特性:
1、用于测试期望结果的断言(Assertion)
2、用于共享共同测试数据的测试工具
3、用于方便的组织和运行测试的测试套件
4、图形和文本的测试运行器
junit优点
另外junit是在xp编程和重构(refactor)中被极力推荐使用的工具,因为在实现自动单元测试的情况下可以大大的提高开发的效率,但是实际上编写测试代码也是需要耗费很多的时间和精力的,那么使用这个东东好处到底在哪里呢?笔者认为是这样的:
通俗解释
1.根据期望结果进行测试
2.多个方法一起运行,而不是像main一样,只能运行一个
3.直观的运行结果
4.规范的测试代码
二 第一个junit4程序
1)引入包junit-4.8.2.jar
hamcrest-all-1.2.jar
2)代码JUnit4 HelloWorld
直接运行类ArithmeticTest.java就可以看到结果.
package com.huaxin.phl;
public class Arithmetic {
public int add(int a, int b) {
return a + b;
}
public String getString() {
return "my name is phl!!!";
}
}
package com.huaxin.test;
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import com.huaxin.phl.Arithmetic;
public class ArithmeticTest {
@BeforeClass
public static void beforeClass(){
System.out.println("junit4.8.2 is begin!");
}
@AfterClass
public static void afterClass(){
System.out.println("junit4.8.2 is end!");
}
@Ignore
public void testIgnore(){
System.out.println("testIgnore!");
}
@Test
public void testAdd() {
System.out.println("testAdd!!");
assertThat(new Arithmetic().add(4, 3), is(7));
}
@Test
public void testLength() {
System.out.println("testLength!!");
assertThat(new Arithmetic().getString(),containsString("phl"));
}
}
3)assertThat
使用hamcrest的匹配方法,更自然
a)
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" ) );
b)
assertThat( str, containsString( "bjsxt" ) );
assertThat( str, endsWith("bjsxt" ) );
assertThat( str, startsWith( "bjsxt" ) );
assertThat( n, equalTo( nExpected ) );
assertThat( str, equalToIgnoringCase( "bjsxt" ) );
assertThat( str, equalToIgnoringWhiteSpace( "bjsxt" ) );
c)
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) );
d)
assertThat( map, hasEntry( "bjsxt", "bjsxt" ) );
assertThat( iterable, hasItem ( "bjsxt" ) );
assertThat( map, hasKey ( "bjsxt" ) );
assertThat( map, hasValue ( "bjsxt" ) );
4)Failure和Error
1.Failure是指测试失败
2.Error是指测试程序本身出错
5)JUnit4 Annotation
1.@Test: 测试方法
a)(expected=XXException.class)
b)(timeout=xxx)
2.@Ignore: 被忽略的测试方法
3.@Before: 每一个测试方法之前运行
4.@After: 每一个测试方法之后运行
5.@BeforeClass: 所有测试开始之前运行
6.@AfterClass: 所有测试结束之后运行
6)运行多个测试
7)注意1.遵守约定,比如:
a)类放在test包中
b)类名用XXXTest结尾
c)方法用testMethod命名
8)其他框架TestNG