suwu150的博客

认真对待每一件事

junit学习之junit的基本介绍

        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去掉,那么这个测试就可正常通过。


阅读更多

扫码向博主提问

去开通我的Chat快问

suwu150

非学,无以致疑;非问,无以广识
版权声明:本文为博主原创文章,若需转载,请注明出处 https://blog.csdn.net/suwu150/article/details/52373562
文章标签: junit 程序测试
上一篇5种字符串拼接方法效率的测试
下一篇java.util 类 Properties
想对作者说点什么? 我来说一句

JUnit JUnit

2008年03月04日 1.42MB 下载

JUnit API JUnit API

2009年07月31日 27KB 下载

junit讲解 junit讲解 junit讲解

2009年07月05日 974KB 下载

JUNIT介绍JUNIT介绍

2011年07月14日 444KB 下载

junit关于junit的介绍

2009年08月10日 841KB 下载

没有更多推荐了,返回首页

关闭
关闭