Junit 入门使用教程

一、Junit 是什么?

  JUnit是一个Java语言的单元测试框架。它由Kent Beck和Erich Gamma创建,逐渐成为源于Kent Beck的sUnit的xUnit家族中最为成功的一个JUnit有它本身的JUnit扩展生态圈。多数Java的开发环境都已经集成了JUnit做为单元测试的工具。java

  注意:Junit 测试也是程序员测试,即所谓的白盒测试,它须要程序员知道被测试的代码如何完成功能,以及完成什么样的功能程序员

 

二、Junit 能作什么?

  咱们知道 Junit 是一个单元测试框架,那么使用 Junit 能让咱们快速的完成单元测试。框架

  一般咱们写完代码想要测试这段代码的正确性,那么必须新建一个类,而后建立一个 main() 方法,而后编写测试代码。若是须要测试的代码不少呢?那么要么就会建不少main() 方法来测试,要么将其所有写在一个 main() 方法里面。这也会大大的增长测试的复杂度,下降程序员的测试积极性。而 Junit 能很好的解决这个问题,简化单元测试,写一点测一点,在编写之后的代码中若是发现问题能够较快的追踪到问题的缘由,减少回归错误的纠错难度。eclipse

 

三、Junit 的用法

  1、首先下载 Junit jar 包,这里给两个版本的百度云下载地址:函数

  ①、Junit 4.12版本    连接:http://pan.baidu.com/s/1c2cRqdM 密码:hfix工具

  ②、Junit 4.8 版本     连接:http://pan.baidu.com/s/1qY8WVGK 密码:ma2u单元测试

  

  2、下载完成以后,在项目中将 下载的 jar 包放进去,而后右键,Build--->Add Build Path  便可。测试

  

 

   若是你是用 eclipse 开发,也能够不用下载那些jar包,eclipse内部集成了,咱们只须要引入便可:ui

    ①、选中项目,右键Build--->Add Libraryspa

      

 

    ②、弹出来的界面,选中 JUnit,点击 next

      

 

     ③、选中 Junit 的版本,通常咱们都用 4.0 以上的。点击 Finish

       

 

   

  3、咱们先看下面这个例子,看一下 Junit 的用法

  ①、编写代码(须要测试的类)

 

public class Calculator {
	
	/**
	 * 传入两个参数,求和
	 * @param a
	 * @param b
	 * @return
	 */
	public int add(int a,int b){
		
		return a+b;
	}
	
	/**
	 * 传入两个参数,求差
	 * @param a
	 * @param b
	 * @return
	 */
	public int sub(int a,int b){
		
		return a-b;
	}

}

  ②、编写测试类

    1、不用Junit   

public class CalculatorTest {

	public static void main(String[] args) {
		Calculator c = new Calculator();
		//测试 add()方法
		int result = c.add(1, 2);
		if(result == 3){
			System.out.println("add()方法正确");
		}
		
		//测试 sub()方法
		int result2 = c.sub(2, 1);
		if(result2 == 1){
			System.out.println("sub()方法正确");
		}
		
	}
}

  那么咱们能够看到,不用 Junit 只能写在 main()方法中,经过运行结果来判断测试结果是否正确。这里须要测试的只有两个方法,若是有不少方法,那么测试代码就会变得很混乱。

 

    2、使用 Junit(看不懂 Assert.assertEquals()方法不要紧,能够本身写 if()语句来判断)

public class CalculatorTest {
	
	@Test
	//测试 add()方法
	public void testAdd(){
		Calculator c = new Calculator();
		int result = c.add(1, 2);
		Assert.assertEquals(result, 3);
	}
	
	@Test
	//测试 sub()方法
	public void testSub(){
		Calculator c = new Calculator();
		int result = c.sub(2, 1);
		Assert.assertEquals(result, 1);
	}

}

  如何运行 Junit呢?鼠标放在须要测试的方法中,右键,Run As ---->JUnit Test

  

 

结果出现以下的绿色横条,则测试经过,红色横条,则测试失败

  

 

那么由上面能够看到,使用 Junit 不须要建立 main() 方法,并且每一个测试方法一一对应,逻辑特别清晰。可能有读者会问,这样写代码量也并不会减小啊,那么你接着往下看:

 

首先介绍 Junit 的几种相似于 @Test 的注解:

  1.@Test: 测试方法

    a)(expected=XXException.class)若是程序的异常和XXException.class同样,则测试经过
    b)(timeout=100)若是程序的执行能在100毫秒以内完成,则测试经过

  2.@Ignore: 被忽略的测试方法:加上以后,暂时不运行此段代码

  3.@Before: 每个测试方法以前运行

  4.@After: 每个测试方法以后运行

  5.@BeforeClass: 方法必须必需要是静态方法(static 声明),全部测试开始以前运行,注意区分before,是全部测试方法

  6.@AfterClass: 方法必需要是静态方法(static 声明),全部测试结束以后运行,注意区分 @After

 

 那么上面的例子,咱们能够看到,每一个 @Test 方法中都有 Calculator c = new Calculator();即类的实例化,那么咱们能够将其放入到 @Before 中

 

public class CalculatorTest {
	Calculator c = null;
	
	@Before
	public void testBeforeClass(){
		c = new Calculator();
	}
	@Test
	//测试 add()方法
	public void testAdd(){
		int result = c.add(1, 2);
		//Assert.assertEquals(result, 3);
		//等价于:
		if(result == 3){
			System.out.println("add()方法正确");
		}
	}
	
	@Test
	//测试 sub()方法
	public void testSub(){
		int result = c.sub(2, 1);
		//Assert.assertEquals(result, 1);
		//等价于:
		if(result == 1){
			System.out.println("sub()方法正确");
		}
	}

}

  

同理:别的注解用法咱们用一个类来看:

public class JunitTest {
	public JunitTest() {
		System.out.println("构造函数");
	}

	@BeforeClass
	public static void beforeClass(){
		System.out.println("@BeforeClass");
	}
	
	@Before
	public void befor(){
		System.out.println("@Before");
	}
	
	@Test
	public void test(){
		System.out.println("@Test");
	}
	
	@Ignore
	public void ignore(){
		System.out.println("@Ignore");
	}
	
	@After
	public void after(){
		System.out.println("@After");
	}
	
	@AfterClass
	public static void afterClass(){
		System.out.println("@AfterClass");
	}
}

  结果为:

@BeforeClass
构造函数
@Before
@Test
@After
@AfterClass

  

注意:编写测试类的原则: 

    ①测试方法上必须使用@Test进行修饰

        ②测试方法必须使用public void 进行修饰,不能带任何的参数

        ③新建一个源代码目录来存放咱们的测试代码,即将测试代码和项目业务代码分开

        ④测试类所在的包名应该和被测试类所在的包名保持一致

        ⑤测试单元中的每一个方法必须能够独立测试,测试方法间不能有任何的依赖

        ⑥测试类使用Test做为类名的后缀(不是必须)

        ⑦测试方法使用test做为方法名的前缀(不是必须)

相关文章
相关标签/搜索