您的位置:首页 > 其它

Junit4的使用方法

2016-04-14 14:05 190 查看

from:http://yinhe2726.javaeye.com/blog/561063

 

 

 

一、简介

Junit 4是Junit框架有史以来的最大改进,其主要目标便是利用Java 5的Annotation特性简化测试用例的编写。

在Eclipse 3.2中已经自带了Junit 4.1(我使用的开发环境是Eclipse 3.3+Myeclipse 6.0),我们可以将Junit 4 Library添加到项目用到的Library中。也可以到Junit.org去下载Junit 4 Librar。要求:JDK 5.0或以上版本。

二、使用

1、Junit 3中,Junit依赖反射来执行每个以test开头的方法,但是Junit 4中,有了Annotation的,我们的测试方法就不需要再以testXXX来标识了,而是写上一个@Test标注即可。如:

@Test public static void m1() {}

2、测试类也不必继承自TestCase了。我们可能会想到,不继承TestCase,我们就无法使用断言,即无法调用assertXxx()方法了。所 以,在Junit 4中,所有的断言的方法全部都以静态方法的形式放入到了Assert类中,使用Assert.assertXxx()来调用,如果使用import static静态导入Assert,那么与Junit 3中使用断言是一样的。

3、Junit 3中,setUp()和tearDown()方法分别是准备测试环境和释放资源,在Junit 4中,这二个方法依赖于@Before和@After标记,好处是如果我们忘记了在这二个方法中调用父类的同名方法,Junit框架会自动处理使用 @Before和@After标记的方法。

4、不再强迫必须使用setUp()和tearDown()作为方法名,可以使用更有意义的方法名。如:init()和close(),前提是它们被标注了@Before和@After标记

三、实例开发

我们还使用讲解Junit 3时使用的Calculate类

package junit;

public class Calculate {

public int add(int a, int b) {

return a + b;

}

public int minus(int a,int b)

{

return a - b;

}

}

 

Junit 4测试类

public class CalculateTest {

private Calculate cal ;

public CalculateTest()

{

System.out.println("创建了CalculateTest类的实例");

}

@Before

public void init() throws Exception {

cal = new Calculate();

System.out.println("测试方法前调用@Befored");

}

@After

public void close() throws Exception {

System.out.println("测试方法后调用@After");

}

@Test

public void doAdd() {

assertEquals(cal.add(1, 2), 3);

}

@Test

public void testMinus() {

assertEquals(cal.minus(2, 1), 1);

}

}

四、测试异常:

对测试异常,JUnit 4可以用expected=Exception.class来期待一个预期的异常,而不必手动编写。如:测试以下方法,

public int div(int a,int b)

{

return a / b;

}

可能会抛出除数为0的异常,我们可以这样来编写:

@Test(expected=ArithmeticException.class)

public void testDiv() {

cal.div(5, 0);

}

五、设置最长执行时间

对于非常耗时的测试,@Test还有一个timeout来标识该方法最长执行时间,超过此时间即表示该方法测试失败:1为毫秒数

@Test(timeout=1)

public void testMinus() {

assertEquals(cal.minus(2, 1), 1);

}

六、@BeforeClass和@AfterClass

这是Junit 4与Junit 3相比较另一个较大的区别。它们在一个Test类的所有测试方法执行前后各执行一次。这是为了初始化一些重要的资源,比如数据库连接,会在 @BeforeClass中来执行初始化,然后再执行测试方法,最后在@AfterClass中释放资源。

由于这二个方法在运行其间仅执行一次,因此它们只能标记为静态方法,其实在所有的测试方法中共享的资源也必须是静态引用。如:

@BeforeClass

public static void setUpBeforeClass() throws Exception {

System.out.println("call @BeforeClass and init database connection");

dbConnection = new Object();

}

@AfterClass

public static void tearDownAfterClass() throws Exception {

System.out.println("call @AfterClass to release database connection");

dbConnection = null;

}

注意:

Java 5.0中的自动Box/UnBox特性,在调用assertEquals()时要注意:如果我们这样写:

assertEquals(100f,100);

按照自动装箱会变成:

assertEquals(new Float(100f),new Integer(100));

这样会引起测试失败,因为它们类型不一样。

因此我们对float和double的测试,应试使用:

assertEquals(float, float, float delta);

assertEquals(double, double, double delta);

还有一点,Junit 4不能与以前的版本兼容
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: