tanyuanji@126.com
版本历史 |
该教程主要讲解 JUnit 4.x 版本的使用,以及如何在Eclipse IDE 中如何使用JUnit
1. Junit介绍
1.1. 简介
多数Java的开发环境都已经集成了JUnit作为单元测试的工具。
2. JUnit 优点
2.1. 对于极限编程而言
2.2. 对于重构而言
其好处和极限编程中是类似的,因为重构也是要求改一点测一点,减少回归错误造成的时间消耗。
2.3. 其他情况
3. 使用 JUnit
3.1. 使用JUnit 进行单元测试
JUnit 4.x 引用了注解的方式来对方法进行测试。通常测试方法都是被包含在一个 测试类 中
使用下面的代码来创建一个单元测试 . 通过如下操作: File → New → JUnit → JUnit Test case.
MyClass tester = new MyClass();
assertEquals( "10 x 5 must be 50 " , 50, tester.multiply( 10, 5 ) );
JUnit 假设可以使用任意的顺序执行测试方法。因而测试不依赖于其他的测试方法。
可以使用注解 @org.junit.Test 来修饰方法,以创建一个测试方法。然后使用预期的值 与 真实的值来检查方法是否正确。
你可以使用 Eclipse IDE方式来运行一个测试类,通过如下操作:右键点击需要测试的类并且选择 Run → Run As → JUnit Test。
也可以使用类 org.junit.runner.JUnitCore运行测试类,而不依赖于Eclipse。
该方法可以标记需要测试的类,选择要执行的测试。只有被选定的测试将会执行。
3.2. 可以使用的 JUnit 注解列表
注解 | 描述 |
@Test public void method() | @Test 注解代表方法是一个测试方法。 |
@Test (expected = Exception.class) | 表示预期会抛出Exception.class 的异常 |
@Test(timeout=100) | 表示预期方法执行不会超过 100 毫秒. |
@Before | 表示该方法在每一个测试方法之前运行,可以使用该方法进行初始化之类的操作 |
@After | 表示该方法在每一个测试方法之后运行,可以使用该方法进行释放资源,回收内存之类的操作 |
@BeforeClass | 表示该方法只执行一次,并且在所有方法之前执行。一般可以使用该方法进行数据库连接操作,注意该注解运用在静态方法。 |
@AfterClass | 表示该方法只执行一次,并且在所有方法之后执行。一般可以使用该方法进行数据库连接关闭操作,注意该注解运用在静态方法。 |
@Ignore | 表示该方法忽略。一般在低层代码有所改动,但是未实现,可以暂时忽略掉。也可以忽略掉执行时间过长的测试。 |
3.3. 断言(Assert)语句
JUnit在类 Assert提供了一些静态的方法来测试某些条件。这些方法一般以 assert开头,允许你指定消息( message ),预期的值 ( expected ),真实的值 ( actual )。一个断言方法比较返回的真实值和预期值,如果比较失败则会抛出 AssertionException 异常
下表给出了JUnit 4.x可以使用的断言方法的一个概述. 参数中的[]表示可选。
语句 | 描述 |
fail(String) | 表示让测试方法失败。一般用于某些代码执行不到,或者在fail代码之前就失败了。参数是可选的。 |
assertTrue([message], boolean condition) | 表示给出的条件断言为真。. |
assertFalse([message], boolean condition) | 表示给出的条件断言为假。. |
assertEquals([String message], expected, actual) | 表示测试两个值的内容相等。注意数组是检查引用相同而不是数组的内容。 |
assertEquals([String message], expected, actual, tolerance) | 测试float或double值匹配。容差是小数点后的位数,必须是相同的。assertEquals( 1.1f, 1.1111d, 1); 。 |
assertNull([message], object) | 表示检查的对象为空。 |
assertNotNull([message], object) | 表示检查的对象为非空。 |
assertSame([String], expected, actual) | 表示两个变量指向同一个引用。 |
assertNotSame([String], expected, actual) | 表示两个变量指向非同一个引用。 |
3.4. 创建测试套件
如果你须有多个测试单元,可以合并成一个测试套件进行测试。并且可以按照指定的顺序执行所有的测试类。
下面的代码示例创建了一个测试套件来执行两个测试单元。如果你要添加其他的测试单元可以使用语句 @Suite.SuiteClasses 进行注解。
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@SuiteClasses( { JUnit1Test.class, StringUtilTest.class } )
3.5. 在 Eclipse 之外执行JUnit
JUnit 提供了使用标准的Java代码形式执行测试,而不依赖于Eclipse。通常使用类
org.junit.runner.JUnitCore 类提供的静态的方法runClasses()。
public static void main(String[] args) {
Result result = JUnitCore.runClasses(JUnit1Test.class,
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
System.out.println( "执行方法个数:" + result.getRunCount() );
System.out.println( "执行时间:" + result.getRunTime() );
4. 安装JUnit
4.1. Eclipse集成JUnit
Eclipse允许你使用不同版本Junit进行集成。一般Eclipse已经默认集成了JUnit3.x和JUnit4.x 不同的版本
4.2. 下载Junit
可以从下面的官网下载 JUnit4.x.jar. 下载好的 junit-4.*.jar 添加到classpath.
http://junit.org/
5. Eclipse对JUnit的支持
5.1. 创建 JUnit 测试
右键单击选中的类,在Package Explorer视图中右键选中 New → JUnit Test Case.
File → New → Other... → Java → JUnit.
5.2. 运行 JUnit 测试
要运行测试类,选中包含测试方法的类。右键点击 Run-as → JUnit Test,将会执行所有的测试方法。
Eclipse 提供了快捷键运行测试类,快捷键为 Alt+Shift+X, ,T。如果你光标选中了某个方法,则会只运行选中的方法。
Eclipse提供了JUnit view视图来显示测试运行的结果。在这个视图中你可以选中个别的测试类,右键选中来Run运行它们。
默认的情况下该视图显示所有的测试信息。你可以通过如下配置设置只显示失败的测试。
5.3. JUnit静态导入的设置
Eclipse 支持JUnit 的静态导入功能,使用 Ctrl+1 或者 Content Assist功能快捷键 。查看下图。
5.4. 创建JUnit 测试套件向导
右键选中需要创建套件的包,选中 New → Other... → JUnit → JUnit Test Suite.
5.5. 异常的测试
注解 @Test (expected = Exception.class) 限制了只能测试一个异常。可以使用下面的代码测试更多异常。
public void testExceptions() {
StringUtil.mustThrowException();