关闭

junit学习之junit的基本介绍

标签: junit程序测试
476人阅读 评论(0) 收藏 举报
分类:
        Junit目前在一些大的公司或者相对规范的软件中使用的比较多,相当多的小公司并没有把单元测试看的太重要。在大点的公司开发人员每天上班后,第一件事情就是从svn上把自己负责的代码checkout下来,然后运行单元测试,如果单元测试通过,那么说明自己的代码没有问题,然后就在代码块上修改与添加,完成后再用junit进行测试,测试完成后如果没有问题,那么就把相应的代码块提交给svn上。

测试一般分为:单元测试、集成测试(主要看一块代码加进去后,系统会不会有问题)、验收测试和压力测试。

        假如一个项目非常的大,测试的东西非常的多,如果不用Junit的话,那么这个工作量是非常大的。单元测试的最基本的一个功能是能进行自动化测试。单元测试都是通过断言的方式来确定结果是否正确,即使用Assert。

一、准备工作

     1、从网站上下载junit的新版本,http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22junit%22%20AND%20a%3A%22junit%22 上下载相应的版本,这里下载的是junit4.7版本,下载地址如下:junit4.7.jar下载

     2、在eclipse中新建一个java项目,名称为JavaJunitTest(可随意),并再新建一个文件夹jar,用于存放我们下载的junit.jar包,然后把junit-4.7复制到里面jar里面,并使用右键add build path,即添加到类路径中,如下图所示:



     3、新建一个类JunitTest.java,如上图图所示结构,内容为:

package com.junit.test;

import org.junit.Assert;
import org.junit.Test;

public class JunitTest {
	@Test
	public void test2()
	{
		System.out.println("test2()");
		int rel=12;
		Assert.assertEquals("不符合结果",2, rel);
	}
} 

二、进行测试

    1、在junit4中提供了一个Assert的类,这个类中有大量的静态方法进行断言的处理,在junit3中由于继承了TestCase,这个TestCase就可以直接assert,而junit4中需要先引入Assert类。如下面代码的使用,其中Assert是断言,在assertEquals方法中,第一个参数是错误时输出结果,第二个参数是程序员预期的结果,而第三个参数是实际结果

package com.junit.test;
import org.junit.Assert;
import org.junit.Test;
public class JunitTest {
	@Test
	public void test2()
	{
		System.out.println("test2()");
		int rel=23;
		Assert.assertEquals("不符合结果",2, rel);
	}
}

      在使用了Assert类中的assertEquals方法,这方法的第一个参数意思是:如果rel的结果不为2,那么就会打印出“加法有问题”的信息。

如下图所示结果:

 


      使用junit测试比使用main方法测试有很大的不同的,每个标识为@Test的方法都是一个可运行的方法,并且他们之间互不影响,例如一个方法出现问题了,并不影响另外一个方法的运行。这就是单元测试的好处

      2、在测试除法除数为0,这个方法应该会抛出异常。如下图现在的测试目标是,如果运行测试方法时,方法没有处理异常,那么这个测试方法就不能通过。那么如何判断不能通过呢,那就是没有进行到Assert断言处,这时就会报ArithmeticException。


 如下图所示,我们对异常进行处理,我们就能够看到程序运行结束,在Assert处获得rel的值仍为初始化时的值0       那么我们都知道有异常发生,那么我们就给这个方法直接给这个方法断言有异常,使用代码:@Test(expected=ArithmeticException.class)实现

package com.junit.test;
import org.junit.Assert;
import org.junit.Test;
public class JunitTest {
	@Test(expected=ArithmeticException.class)
	public void test2()
	{
		System.out.println("test2()");
		int rel=0;
		try{
		rel=2/0;
		}catch(Exception e)
		{e.printStackTrace();}
		//System.out.println("end");
		Assert.assertEquals("不符合结果",2, rel);
	}
}
结果如下所示:


          上图中,我们断言运算中会抛出异常expected=ArithmeticException.class,结果也抛出异常expected=ArithmeticException.class,所以junit测试是通过的。

下面我们再测一测如果我们断言有异常,但是算法中没有异常,结果如下图所示:显示我们期望的异常而不能正常运算


    2、有时在测试时需要有这样的需求,就是对一个方法的时间进行测试,例如,要让一个方法,200毫秒里运行完,如果这个方法200毫秒不能运行完,那么这个方法就应该抛出异常,示例中将方法time中线程沉睡300毫秒,那么这个方法就不可能在200毫秒内完成,所以这个方法就会抛出异常。如下图所示:


因为发生异常,程序都没有运行结束,没输出结尾的end,这就可以做一些方法性能上的测试,把Thread去掉,那么这个测试就可正常通过。


1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:251525次
    • 积分:4851
    • 等级:
    • 排名:第6129名
    • 原创:213篇
    • 转载:107篇
    • 译文:0篇
    • 评论:44条
    最新评论