`
leon.s.kennedy
  • 浏览: 106452 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

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:

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

分享到:
评论
2 楼 leon.s.kennedy 2012-12-08  
jixuezhiyuan 写道
你连需要哪些jar包都不说,你是只给自己看的吗?

你如果按照上面进行操作,我想应该不用你手动添加jar包
1 楼 jixuezhiyuan 2012-12-07  
你连需要哪些jar包都不说,你是只给自己看的吗?

相关推荐

Global site tag (gtag.js) - Google Analytics