作为一名java开发者,相信你或多或少的接触过单元测试,对于测试来讲它是一门能够区分专业开发人员与业余开发人员的重要学科,这篇文章将对java中最常见的一个单元测试框架junit进行一个梳理和讲解。如果你之前没接触过,那么就通过这篇文章进行一个学习。如果你是一个测试老手,我也希望这篇文章能够加深你的印象。

一、为什么需要单元测试

在平时的开发当中,一个项目往往包含了大量的方法,可能有成千上万个。如何去保证这些方法产生的结果是我们想要的呢?当然了,最容易想到的一个方式,就是我们通过System.out来输出我们的结果,看看是不是满足我们的需求,但是项目中这些成千上万个方法,我们总不能在每一个方法中都去输出一遍嘛。这也太枯燥了。这时候用我们的单元测试框架junit就可以很好地解决这个问题。

junit如何解决这个问题的呢?答案在于内部提供了一个断言机制,他能够将我们预期的结果和实际的结果进行比对,判断出是否满足我们的期望。相信到这,你已经迫不及待的想认识一下junit,下面我们直接通过案例,来分析一下这个机制。

二、从案例讲起

1、预备工作

junit4是一个单元测试框架,既然是框架,这也就意味着jdk并没有为我们提供api,因此在这里我们就需要导入相关的依赖。对于IDEA来说,你在构建Maven项目的时候会直接自动添加相关的依赖,如果没有,手动添加即可:

这里的版本是4.12。当然还有最新的版本。你可以手动选择。这里选用的是4的版本。

2、案例

这里我们要测试的功能超级简单,就是加减乘除法的验证。

然后我们看看如何使用junit去测试。

以上就是我们的单元测试,需要遵循一下规则:

1、每一个测试方法上使用@Test进行修饰

2、每一个测试方法必须使用public void 进行修饰

3、每一个测试方法不能携带参数

4、测试代码和源代码在两个不同的项目路径下

5、测试类的包应该和被测试类保持一致

6、测试单元中的每个方法必须可以独立测试

以上的6条规则,是在使用单元测试的必须项,当然junit也建议我们在每一个测试方法名加上test前缀,表明这是一个测试方法。

assertEquals是一个断言的规则,里面有两个参数,第一个参数表明我们预期的值,第二个参数表示实际运行的值。不过junit5对这些做出了一些改变,我们会在后续的文章中专门介绍。

我们运行一下测试类,就会运行每一个测试方法,我们也可以运行某一个,只需要在相应的测试方法上面右键运行即可。如果运行成功编辑器的控制台不会出现错误信息,如果有就会出现failure等信息。

3、运行流程

在上面的每一个测试方法中,代码是相当简单的,就一句话。现在我们分析一下这个测试的流程是什么:

在上面的代码中,我们使用了两个测试方法,还有junit运行整个流程方法。我们可以运行一下,就会出现下面的运行结果:

从上面的结果我们来画一张流程图就知道了:

这个流程相信应该能看懂,如果我们使用过SSM等其他的一些框架,经常会在before中添加打开数据库等预处理的代码,也会在after中添加关闭流等相关代码。

以上这个案例如果能看懂,基本上算是入门了。其实这个案例也比较简单。相信以大家聪明的头脑能看懂。下面我们看看junit中的注解。

三、注解

对于@Test,里面有很多参数供我们去选择。我们来认识一下

1、@Test(expected=XX.class)

这个参数表示我们期望会出现什么异常,比如说在除法中,我们1/0会出现ArithmeticException异常,那这里@Test(expected=ArithmeticException.class)。在测试这个除法时候依然能够通过。

2、@Test(timeout=毫秒 )

这个参数表示如果测试方法在指定的timeout内没有完成,就会强制停止。

3、@Ignore

这个注解其实基本上不用,他的意思是所修饰的测试方法会被测试运行器忽略。

4、@RunWith

更改测试运行器。

四、测试套件

在文中一开始我们曾经提到,如果我们的项目中如果有成千上万个方法,那此时也要有成千上万个测试方法嘛?如果这样junit使用起来还不如System.out呢,现在我们认识一下测试嵌套的方法,他的作用是我们把测试类封装起来,也就是把测试类嵌套起来,只需要运行测试套件,就能运行所有的测试类了。、

下面我们使用测试套件,把这些测试类嵌套在一起。

也很简单,下面我们看一下,参数化设置。

五、参数化设置

什么是参数化设置呢?在一开始的代码中我们看到,测试加法的时候是1+1,不过我们如果要测试多组数据怎么办?总不能一个一个输入,然后运行测试吧。这时候我们可以把我们需要测试的数据先配置好。

这时候再去测试,只需要去选择相应的值即可,避免了我们一个一个手动输入。

对于junit测试,常用的使用方法就是这么多,关于深入了解,只能放在后面的课程中了。今天先到这。

java 单元测试_Java程序员必须要知道的单元测试框架Junit详解相关推荐

  1. java书籍_Java程序员必看的 13 本 Java 书籍!

    原文:Java程序员必看的 13 本 Java 书籍! 作者: java技术栈 关乎于程序员,除了做项目来提高自身的技术,还有一种提升自己的专业技能就是:多!看!书! 毕竟,书是学习的海洋呢!So,J ...

  2. java走向_Java 程序员走向“人生巅峰”的20个建议

    作为一个程序员,在提高自己技能的同时,也要提高自己的思维方式.以下20条建议,可以帮助我们成为一个专业的coder,专业的技术人员. (1) 熟悉工具 军人手中有枪,农民手中有锄头,而我们手中有Jav ...

  3. tomcat如何修改java版本_Java程序员必备——Tomcat配置技巧Top10

    一.配置系统管理(Admin Web Application) 大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面.Tomcat按照自己的方式,同样提供一个成 ...

  4. chrome java插件_Java程序员喜欢的10款软件里有你在用的吗?

    作为一名Java程序员,日常开发的过程中,我们需要借助很多工具来进行编码.好的工具可以极大的提升程序员的工作效率,今天我们来认识下大多数程序员喜欢的10款软件.持不同意见或有想要补充的小伙伴,欢迎评论 ...

  5. java过剩_Java程序员的未来发展之路,你是否感到迷茫?你不知道的Java现状

    Java的生态圈决定了这门语言在未来10年都会是最热门的语言之一,因为Java技术具有卓越的通用性.高效性.安全性和平台移植性,它可以跨平台的应用到不同的领域,工作需求足够大. 但也有很多人一直在说J ...

  6. cdt规约报文用程序解析_程序员必备的学习笔记《TCP/IP详解(二)》

    把这三个协议放到一起学习是因为这三个协议处于同一层,ARP 协议用来找到目标主机的 Ethernet 网卡 Mac 地址,IP 则承载要发 送的消息.数据链路层可以从 ARP 得到数据的传送信息,而从 ...

  7. java葵花宝典_JAVA程序员想入职跳槽,这些基本功一定要做好,你给自己打几分?...

    基础篇 Q1 访问修饰符 public , private , protected 以及不写时的区别? 类的成员不写访问修饰符时,默认的是default. Q2 Stirng是最基本的数据类型吗? 不 ...

  8. java命令_Java程序员,不得不会的JDK jstack命令工具

    作者:Jay_huaxiao 链接:https://juejin.im/post/5ead8067e51d454da36cf182 如果有一天,你的Java程序长时间停顿,也许是它病了,需要用jsta ...

  9. 现在的游戏都是java吗_Java程序员:工作还是游戏,是该好好衡量一下了

    前阵子我终于下定决心,删掉了硬盘里所有的游戏. 身为一个程序猿,每天都要和各种新技术打交道,闲暇时间,总还得看一下各大论坛,逛逛博客园啥的,给自己充充电.游戏的话,其实我自小就比较喜欢,可以算是一种兴 ...

最新文章

  1. Xamarin iOS教程之显示和编辑文本
  2. leetcode算法题--包含min函数的栈
  3. Excel打开csv文件显示乱码问题解决方法
  4. wxWidgets:wxPaintEvent类用法
  5. python秒转化为时间格式_Python耗费时间秒转 天小时分钟秒 时间格式美化
  6. idea写java spark程序,Spark : 在IDEA中用scala编写Spark的WordCount程序并提交运行
  7. 【BIM入门实战】Revit 图元分类有哪三种?Revit图元分类图文详解
  8. Main函数参数argc,argv说明
  9. python用matplotlib画球_python 如何用matplotlib画一个漂亮的圆-百度经验
  10. 双向链表示意图_java双向链表示意图
  11. 与原子操作相关的 volatile 和 sig_atmotic_t
  12. 用C++程序理解汉字的机内码表示
  13. 8uftp官网网址,8uftp官网网址及5大软件特色
  14. 嵌入式ARM体系结构总结
  15. C++进程和Python进程通信
  16. Zlib文件压缩和解压
  17. 【大数据】Linkis前端管理台如何部署
  18. F5 LTM fullnat模式测试记录及配置
  19. 【学堂在线】C++ 语言程序设计基础 - 课程习题
  20. 极域电子教室2010版广播出现黑屏问题解决办法之一

热门文章

  1. Word如何实现一级标题汉字,二级标题数字
  2. Mac 显示桌面和窗口最小化方法的几个快捷键
  3. 一个古老的编程游戏:Python Challenge全通攻略
  4. 今天面试了几家高级测试工程师,面试题整理(含答案)
  5. Surface Book
  6. vue 实现动态路由
  7. fgetc/fputc 和 fgets/fputs 的详细用法
  8. ORA-30657: operation not supported on external organized table
  9. 【自动驾驶】自动驾驶感知系统与关键技术介绍
  10. html 上传图片,拖拽图片,并在页面显示