随笔 - 0, 文章 - 75, 评论 - 0, 引用 - 0
数据加载中……

JUnit4入门

什么是单元测试?


写了个类,要给别人用,会不会有Bug?怎么办?测试


用main方法测试好不好?不好


1.不能一起运行


2.大多数情况下需要人为的观察输出是否正确



为什么要进行单元测试?


重用测试,应付将来的实现的变化


提高士气,明确知道我的东西是没问题的



JUnit4 HelloWorld


1.new Project


2.建立类


public class T {
public int add(int x , int
y){
return x + y;
}
}


3.建立testCase


创建一个新的Junit 4 Test Case,选择junit4,选择要测试的类,next


勾上要测试的方法,点finish


会提示是否要导入junit4的jar包,如果想使用MyEclipse自带的,点ok即可


之后会生成如下代码:


import static org.junit.Assert.*;


import org.junit.Test;


public class TTest {


@Test
public final void testAdd() {
fail("Not
yet implemented"); // TODO
}


}


静态导入了Assert类的所有静态断言方法,fail()只是其中一种


修改下自动生成的testAdd()方法:


@Test
public final void testAdd() {
int z = new T().add(3,
5);
assertEquals(8, z);
}


assertEquals(期望得到的值,实际的值),此时我们希望测试T类的add()方法, 3 + 5
是否等于8


之后,右键,Run as ,JUnit Test运行测试


JUnit4入门


左边的小窗口为JUnit,会看到一个绿色的“条”,则表示测试通过,这个方法没问题


现在我们修改testAdd()方法:


JUnit4入门
此时,z不等于9,左边的“条”就变成红色,表示不通过



还可以写多个断言一起进行测试,其中每个断言方法,
都重载了一个(String message) 代表如果出错了,会提示什么消息



@Test
public final void testAdd() {
int z = new
T().add(3, 5);
assertEquals(8, z);
assertTrue("z大于8", z > 8 );
}


JUnit4入门



----------------------------------------


一种新的测试方法:assertThat()
使用它时,需要下载jar包:hamcrest-all-1.3.0RC2.jar


如果用MyEclipse自带的JUnit4的jar包,会产生冲突,


测试时,会报一个Security的异常,ClassLoader() 原因是加载类的加载器不同


所以单独下载JUnit4的jar包并导入: junit-4.10.jar



@Test
public final void testAdd() {
int z = new
T().add(3, 5);
assertEquals(8,
z);
assertTrue("z大于8", z >= 8 );
assertThat(z,
is(8)); //测试这个对象是否等于8
assertThat(z,
allOf(greaterThan(5),lessThan(10))); //判断z 大于5并且小于10
}


具体方法信息查看API http://www.jmock.org/javadoc/2.3.0/org/hamcrest/Matchers.html


---------------------------------------------


Failure 和 Error区别:Failure是测试失败,Error是指程序本身出错
比如调用 assertTrue("z大于8", z
>= 8 ) 方法,如果不是 z>=8 时,会显示Failure
如果 在testAdd() 方法内,写 int i = 1/0;
此时会显示Error


执行多个测试方法:
自定义测试方法:@Test
public void testDivide(){}


执行JUnit Test时,会一起测试这个类中所有方法



@Test的属性:


@Test(expected=java.lang.ArithmeticException.class) //希望他抛出异常
public
void testDevide(){
int z = new T().devide(3, 0);
//除数为0
assertThat(z, is(0));
}


此时测试会通过



@Test(timeout = 100) //在100毫秒内运行结束这个方法


用来测试一些算法等,如果100毫秒内完成了这个方法的执行,则通过


@Ignore:被忽略的测试方法,在方法前写上它,执行测试时,标志这个方法不被测试


@Before:每一个测试方法之前运行
@After:每一个测试方法之后运行


----------------------------------
@BeforeClass:所有测试开始之前运行
@AfterClass:所有测试结束之后运行


@BeforeClass 和 @AfterClass必须为static:


类初始化之前就已经执行了,他们的作用:配置环境,打开连接,关闭、释放连接等


 



posted on 2012-04-22 16:05 hantai 阅读(185) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: