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

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

在以前的的项目中也用过Junit,当时的使用只是把Junit当成一个有多个main方法的一个函数。假如一个项目非常的大,测试的东西非常的多,如果不用Junit的话,那么这个工作量是非常大的。单元测试的最基本的一个功能是能进行自动化测试。单元测试都是通过断言的方式来确定结果是否正确,即使用Assert。

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

2、在myeclipse中新建一个java项目,名称为junit01,并在新建一个文件夹,名称为lib,把上面下载的junit-4.10复制到里面,并build path,即添加到类路径中,如下图所示:

3、新建一个类Calcuate,其功能主要实现加减乘除,如下图所示,其所在的包为cn.whp.util

4、创建上面的类Calcuate中新建测试类,首先在myeclipse中创建一个source folder,将其命名成test,然后在其下创建一个与类Calcuate类在相同包的包,如下图所示:

5、junit3与junit4的区别还是比较明显的,在junit3中,如果某个类是测试类,必须将其继承类TestCase,如果某个方法是测试方法,必须让这个方法以testXX开头,如果希望指定某个测试方法运行之前运行某个初始化方法,这个方法的名称必须是setUp,如果希望在某个测试方法运行之后运行某个释放资源的方法,这个方法的名称必须是tearDown。

在junit4中,一个POJO类就是一个测试类,测试方法通过@Test来标识,初始化方法通过@Before来标识,释放资源的方法通过@After来标识,但是为了让junit4的测试类在junit3中也可以使用,习惯于把初始化方法命名为setUp,释放资源的方法命名为tearDown。Test中的测试方法一般以Test来开始。其中标识为Before注解的方法,每次运行测试类,都会执行标识为@After与@Before的方法。如下图所示:

6、在junit4中提供了一个Assert的类,这个类中有大量的静态方法进行断言的处理,在junit3中由于继承了TestCase,这个TestCase就可以直接assert,而junit4中需要先引入Assert类。如下图:

 在上图中使用了Assert类中的assertEquals方法,这方法的第一个参数意思是:如果方法cal.add(12,22)计算的结果不为34,那么就会打印出“加法有问题”的信息。第二个参数为方法cal.add(12,22)的执行结果,第三个参数是开发人员预计的函数cal.add(12,22)执行后的结果,这里预计12与22相加后其结果为34,如果在执行测试方法后,rel不等于34,那么就会报加法有问题。如果结果等于34,那么这个方法就测试通过。把上图中最后一个参数的值34改成35,那么执行junit测试后将会出现如下错误:

 如果想让上面的测试类可以在junit3中运行,可以把Assert类静态的导入,这样在调用每个静态方法时,就不用都写上Assert类了,如下图所示:


 然后把所有别的测试方法补全,使用junit测试比使用main方法测试有很大的不同的,每个标识为@Test的方法都是一个可运行的方法,并且他们之间互不影响,例如testAddd方法出现问题了,并不影响testMinus方法的运行。这就是单元测试的好处,如下图: 

7、在测试除法cal.divide(3,0),如果除数为0,这个方法应该会抛出异常。现在的测试目标是,如果运行测试方法后,测试方法没有抛出异常,那么这个测试方法就不能通过。这时就需要用到junit的ArithmeticException。如下图所示:

这里如果把cal.divide(20,0)改成cal.divide(20,10),这样divide是没有问题的,但是这时测试类中的testDivideException方法执行junit测试后就不能通过了,因为这个测试方法已经断言所要测试的方法divide要抛出异常,结果没有抛出异常,所以junit测试是不能通过的。如下图所示:

 测试结果提示,应该抛出一个异常,结果没有抛出异常。

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

10、Junit的最基本的东西基本是这样的,断言、测试异常,捕获异常,测试方法的性能

1、junit学习之junit的基本介绍相关推荐

  1. 【JUnit学习笔记】1:使用JUnit4进行简易单元测试的例子

    参考:1,2,3 程序结构 JUnit运行配置 在IDEA中: 在Eclipse中直接右键,Run AS->JUnit Test即可. pom.xml <?xml version=&quo ...

  2. Activiti学习(一)之工作流的介绍和使用

    什么是工作流 1. 工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是"使在多个参与者之间按照某种预定义的规则自动进行传递文档.信息或任务的过程, ...

  3. JUnit 4 与 JUnit 3

    JUnit 是 Java? 语言事实上的 标准单元测试库.JUnit 4 是该库三年以来最具里程碑意义的一次发布.它的新特性主要是通过采用 Java 5 中的标记(annotation)而不是利用子类 ...

  4. java 计算器 junit测试_Java Junit测试

    使用junit做测试目的是尽量早的发现程序的bug,一个bug隐藏的时间越久,修复他的代价就越大. 1.Junit简介: Junit最初是由Erich Gamma 和 Kent Beck 编写的一个回 ...

  5. HTML/CSS学习笔记01【概念介绍、基本标签】

    w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...

  6. 《从0到1学习Flink》—— Apache Flink 介绍

    前言 Flink 是一种流式计算框架,为什么我会接触到 Flink 呢?因为我目前在负责的是监控平台的告警部分,负责采集到的监控数据会直接往 kafka 里塞,然后告警这边需要从 kafka topi ...

  7. [深度学习] 分布式Tensorflow 2.0 介绍(二)

    [深度学习] 分布式模式介绍(一) [深度学习] 分布式Tensorflow 2.0介绍(二) [深度学习] 分布式Pytorch 1.0介绍(三) [深度学习] 分布式Horovod介绍(四) 一 ...

  8. junit junit_穿越JUnit流

    junit junit 关于JUnit 5迁移的好处之一是,您可以在老式模式下运行JUnit 4测试,并且所有内容仍然兼容. 不利的一面是,某些注释和方法在JUnit 4和JUnit 5中具有相同的名 ...

  9. junit junit_使用junit做其他事情

    junit junit junit!=单元测试 Junit是Java单元测试框架. 通常,我们将它用于单元测试,但是很多时候我们也使用它来执行集成测试. 主要区别在于,单元测试测试单个单元,而集成测试 ...

最新文章

  1. 亮相百度WAVE SUMMIT+2021,Intel OpenVINO带来新气象
  2. Linxu用户登录监测
  3. SAP、ORACLE、用友、金蝶四大ERP软件供应商的区别
  4. 配置PIX515E DMZ的基本方法与故障排除
  5. LeetCode 231. 2的幂
  6. 1流式细胞术荧光比值计算_流式细胞术技巧攻略!
  7. mysql 数组变量_如何在MySQL中模拟数组变量?
  8. Android的HashMap方法,Android中实现HashMap排序的方法
  9. 金蝶徐少春与北大学生分享“最伟大的梦想”
  10. dedecms采集织梦免写规则登陆模块软件
  11. 使用Bitvise SSH代理访问
  12. word2016标题序号变黑色竖线解决方法
  13. 安装chrome第三方插件教程:(超详细)
  14. 004:Python爬虫实战 由易到难(图文解析)
  15. elementui进度条如何设置_Progress 进度条
  16. Remarkable简单使用
  17. C++11多线程:thread头文件
  18. 点阵字python_Python点阵字玩转动态歌词
  19. 【MySQL】Mysql范式及外键作用
  20. 推荐一个强大的开源动态线程池项目

热门文章

  1. OpenCV——图像处理入门:膨胀与腐蚀、图像模糊、边缘检测
  2. kubernetes dev client-go 输出资源
  3. Nightmare2
  4. 如何用iMazing软件将苹果手机数据备份及功能详解
  5. str_replace替换多个字符串
  6. 飞翔的红蜻蜓(浙理体育)——生成跑步数据并上传
  7. Windows10系统安装软件后软件界面异常(变得很小或很大),界面显示不完全的解决方案
  8. Android LCD整理二:mtk平台LCD流程分析(LK部分)
  9. 携手并进,利尔达科技集团与中国计量大学举办捐赠签约仪式
  10. LeetCode 6036. 构造字符串的总得分和