Junit4入门

Junit介绍

Junit 测试框架是最流行的Java单元测试框架。
Junit4特性:
  • 简单的注解,提供书写Junit测试的基本特性
  • 断言方法(Assert Methods)比较测试的方法执行结果值和期望值
  • @Ignore 注解,忽略测试方法或者测试类的执行
  • 期望异常测试
  • 超时测试 , 测试方法的执行时间
  • 测试组件,一起运行一些测试类
  • 参数化测试, 以不同的输入参数值测试方法

Eclipse应用Junit

1. 打开Eclipse中的Junit视图窗口:
Window → Show View → OtherJava → JUnit → OK 
2、Junit视图窗口特性
  • ① Runs: 显示了执行了的junit测试用例(方法)总数
  • ② Errors:  显示结果为error/exception的测试用例总数
  • ③ Failures:显示测试用例执行失败总数
  • ④ Failure Trace:展示 error/exception or failure trace
  • ⑤ Show Failures Only:只显示失败的用例信息
  • ⑥ Scroll Lock:scroll lock
  • ⑦ Rerun Test: 重新运行测试用例
  • ⑧ Rerun Test – Failure First:重新运行测试用例,先执行失败了的测试用例
  • ⑨ Stop Junit Test Run:停止单元测试
  • ⑩ Test Run History:显示测试用例运行历史

Junit使用

使用步骤:创建一个Java项目 → 创建Junit测试类 → 执行Junit测试类
1、创建Java项目
package com.xueji.junit;

public class MathUtil {
	public int add(int i, int j) {
		return i + j;
	}
}
2、 创建Junit测试类
鼠标右键MathUtil.java --> new --> JUnit Test Case --> Next --> 选择相应的测试方法 --> Finish --> 得到测试类


MathUtilTest.java
package com.xueji.junit;

import static org.junit.Assert.*;

import org.junit.Test;

public class MathUtilTest {

	@Test
	public void testAdd() {
		MathUtil mathUtil = new MathUtil();
		int actualResult = mathUtil.add(1, 2);
		int expectedResult = 3;
		assertEquals(expectedResult, actualResult);
	}

}
3、运行该测试类
右击MathUtilTest.java --> Run As --> Junit Test

Junit注解

Junit4 注解提供了书写单元测试的基本功能。本章将介绍@BeforeClass, @AfterClass,@Before, @After 和@Test 这几个基本的注解。

@BeforeClass注解

被@BeforeClass注解的方法会是:
  • 只被执行一次
  • 运行junit测试类时第一个被执行的方法
这样的方法被用作执行计算代价很大的任务,如打开数据库连接。被@BeforeClass 注解的方法应该是静态的(即 static类型的).

@AfterClass注解

被@AfterClass注解的方法应是:

  • 只被执行一次
  • 运行junit测试类是最后一个被执行的方法
该类型的方法被用作执行类似关闭数据库连接的任务。被@AfterClass 注解的方法应该是静态的(即 static类型的).

@Before注解

被@Before 注解的方法应是:
  • junit测试类中的任意一个测试方法执行 前 都会执行此方法
该类型的方法可以被用来为测试方法初始化所需的资源。

@After注解

被@After注解的方法应是:
  • junit测试类中的任意一个测试方法执行后 都会执行此方法, 即使被@Test 或 @Before修饰的测试方法抛出异常
该类型的方法被用来关闭由@Before注解修饰的测试方法打开的资源。

@Test 注解

被@Test注解的测试方法包含了真正的测试代码,并且会被Junit应用为要测试的方法。@Test注解有两个可选的参数:
  • expected 表示此测试方法执行后应该抛出的异常,(值是异常名)
  • timeout 检测测试方法的执行时间

Junit断言方法(Assert methods)

 Junit 4 断言方法允许检查测试方法的期望结果值和真实返回值。Junit的org.junit.Assert类提供了各种断言方法来写junit测试。这些方法被用来检查方法的真实结果值和期望值。下列一些有用的断言方法列表:

Junit 4 Assert Methods
MethodDescription
assertNull(java.lang.Object object)检查对象是否为空
assertNotNull(java.lang.Object object)检查对象是否不为空
assertEquals(long expected, long actual)检查long类型的值是否相等
assertEquals(double expected, double actual, double delta)检查指定精度的double值是否相等
assertFalse(boolean condition)检查条件是否为假
assertTrue(boolean condition)检查条件是否为真
assertSame(java.lang.Object expected, java.lang.Object actual)检查两个对象引用是否引用同一对象(即对象是否相等)
assertNotSame(java.lang.Object unexpected, java.lang.Object actual)

检查两个对象引用是否不引用统一对象(即对象不等)


Junit 4参数化测试

Junit 4 参数化测试 允许通过变化范围的参数值来测试方法。参数擦测试可以通过以下简单的步骤实现:
  1. 对测试类添加注解 @RunWith(Parameterized.class)
  2. 将需要使用变化范围参数值测试的参数定义为私有变量
  3. 使用上一步骤声明的私有变量作为入参,创建构造函数
  4. .创建一个使用@Parameters注解的公共静态方法,它将需要测试的各种变量值通过集合的形式返回。
  5. 使用定义的私有变量定义测试方法

Junit 4 参数化测试样例

EvenNumberChecker.java 校验输入的数字是否为偶数:

public class EvenNumberChecker {  
   
    /** 
     * Is input number even. 
     * 
     * @param i input number 
     * @return <code>true</code> if input is even number; otherwise return false 
     */  
    public boolean isEven(int i) {  
        if (i % 2 == 0) {  
            return true;  
        } else {  
            return false;  
        }  
    }  
}  
EvenNumberCheckerTest.java  对 EvenNumberChecker.java 进行参数化测试:
import static org.junit.Assert.*;  
   
import java.util.Arrays;  
import java.util.Collection;  
   
import org.junit.Test;  
import org.junit.runner.RunWith;  
import org.junit.runners.Parameterized;  
import org.junit.runners.Parameterized.Parameters;  
   
/** 
* @author javatutorials.co.in 
*/  
// Step 1  
@RunWith(Parameterized.class)  
public class EvenNumberCheckerTest {  
   
    // Step 2: variables to be used in test method of Step 5  
    private int inputNumber;  
    private boolean isEven;  
   
    // Step 3: parameterized constructor  
    public EvenNumberCheckerTest(int inputNumber, boolean isEven) {  
        super();  
        this.inputNumber = inputNumber;  
        this.isEven = isEven;  
    }  
   
    // Step 4: data set of variable values  
    @Parameters  
    public static Collection<Object[]> data() {  
        Object[][] data = new Object[][] {  
                { 2, true },  
                { 5, false },  
                { 10, false }  
        };  
        return Arrays.asList(data);  
    }  
   
    @Test  
    public void test() {  
        System.out.println("inputNumber: " + inputNumber + "; isEven: " + isEven);  
        EvenNumberChecker evenNumberChecker = new EvenNumberChecker();  
        // Step 5: use variables in test code  
        boolean actualResult = evenNumberChecker.isEven(inputNumber);  
        assertEquals(isEven, actualResult);  
    }  
}  

Junit 4测试套件(Test Suite)

Junit 4允许通过使用测试套件类批量运行测试类 . 为一套测试类创建一个测试套件,要为测试类添加以下注解:
  1. @RunWith(Suite.class)
  2. @SuiteClasses(TestClass1.class, TestClass2.class)

当运行时,所有包含在@SuiteClasses注解内的所有测试类都会被执行。

AllTests.java Test Suite Class

import org.junit.runner.RunWith;  
import org.junit.runners.Suite;  
import org.junit.runners.Suite.SuiteClasses;  
   
/** 
* @author javatutorials.co.in 
*/  
@RunWith(Suite.class)  
@SuiteClasses({ ArithmeticTest.class, GeometryTest.class })  
public class AllTests {  
   
}  

Junit 4忽略测试(Ignore Test)

Junit 4 忽略测试(Ignore test)被用来禁止执行junit测试类的某些或者全部测试方法。Junit 提供了@Ignore注解来实现 忽略测试。它可以用来跳过失败、或者抛出异常的测试方法。
  • Junit 4 Ignore Test 应用到某些测试方法上
  • Junit 4 Ignore Test 应用到整个测试类上

Junit 4超时测试(Timeout test)

Junit 4超时测试(Timeout test)可以被用来测试方法的执行时间。 Junit 4 超时测试可以被用在:
  • 在测试类的方法上使用 @Timeout 注解
  • 测试类的所有方法应用 Timeout规则

在测试类的方法上使用 @Timeout 注解

Junit 4 提供了 @Timeout 注解来测试任意特定方法的执行时间。如果测试方法的执行时间大于指定的超时参数,测试方法将抛出异常,测试结果为失败。指定的超时参数是以毫秒记.

@Timeout 注解样例

TimeoutTest.java test class for timeout test.

import org.junit.Test;  
   
/** 
* @author javatutorials.co.in 
*/  
public class TimeoutTest {  
   
    /** 
     * Example of timeout test. 
     * Test will fail if it takes more than 200 ms to execute 
     */  
    @Test(timeout = 200)  
    public void testTimeout() {  
        while (true);  
    }  
}  

测试类的所有方法应用 Timeout规则

Junit 4 提供了 Timeout 规则来测试类中的所有方法。如果类中的任意一个方法执行时间超过了在Timeout 规则中规定的值,测试方法将抛出异常,测试结果为失败。指定的超时参数是以毫秒记。

Timeout 规则

TimeoutRuleTest.java 测试Timeout 规则的测试类:
import org.junit.Rule;  
import org.junit.Test;  
import org.junit.rules.Timeout;  
   
/** 
* @author javatutorials.co.in 
*/  
public class TimeoutRuleTest {  
   
    /** 
     *  Rule is applied to all methods of class 
     *  time is specified in milliseconds 
     */  
    @Rule  
    public Timeout timeout = new Timeout(1000);  
   
    /** 
     * Example of timeout test. 
     * Test will fail if it takes more than 1 sec to execute 
     */  
    @Test  
    public void testTimeout1() {  
        while(true);  
    }  
   
    /** 
     * Example of timeout test. 
     * Test will fail if it takes more than 1 sec to execute 
     */  
    @Test  
    public void testTimeout2() {  
        while(true);  
    }      
}  


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

本文出处为 http://blog.csdn.net/luanlouis,转载请注明出处,谢谢!



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值