千家信息网

测试工具 JUnit 4怎么用

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,这期内容当中小编将会给大家带来有关测试工具 JUnit 4怎么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。介绍JUnit 4.x 是利用了 Java 5 的特性
千家信息网最后更新 2025年02月08日测试工具 JUnit 4怎么用

这期内容当中小编将会给大家带来有关测试工具 JUnit 4怎么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

介绍

JUnit 4.x 是利用了 Java 5 的特性(Annotation)的优势,使得测试比起 3.x 版本更加的方便简单,JUnit 4.x 不是旧版本的简单升级,它是一个全新的框架,整个框架的包结构已经彻底改变,但 4.x 版本仍然能够很好的兼容旧版本的测试用例。

使用

先来点实在的,看看代码中是怎么使用的。其余的待会再说。

下载

  • 下载 JUnit4.8.1.jar 包(这里提供了下载地址)

加入项目

  • 把 junit4.8.1.jar 文件,加入到项目的 classpath 中。

对比

在代码之前,先让我们看一下 JUnit 4 和 JUnit 3 的区别,看看 JUnit 4 到底简化了哪些东西。


演示代码

[java] view plain copy

  1. package com.tgb;

  2. import static org.junit.Assert.*;

  3. import org.junit.Ignore;

  4. import org.junit.Test;

  5. public class TestWordDealUtil {

  6. // 测试 wordFormat4DB 正常运行的情况

  7. @Test

  8. public void testWordFarmat4DBNormal() {

  9. String target = "employeeInfo";

  10. String result = WordDealUtil.wordFormat4DB(target);

  11. assertEquals("employee_info", result);

  12. }

  13. // 测试 null 时的处理情况

  14. @Test(expected=NullPointerException.class)

  15. public void testWordFormat4DBNull() {

  16. String target = null;

  17. String result = WordDealUtil.wordFormat4DB(target);

  18. assertNull(result);

  19. }

  20. // 测试空字符串的处理情况

  21. @Test

  22. public void testWordFormat4DBEmpty() {

  23. String target = "";

  24. String result = WordDealUtil.wordFormat4DB(target);

  25. assertEquals("", result);

  26. }

  27. // 测试当首字母大写时的情况

  28. //@Ignore

  29. @Test

  30. public void testWordFormat4DBBegin() {

  31. String target = "EmployeeInfo";

  32. String result = WordDealUtil.wordFormat4DB(target);

  33. assertEquals("_employee_info", result);

  34. }

  35. // 测试当尾字母大写时的情况

  36. @Test

  37. public void testWordFormat4DBEnd() {

  38. String target = "employeeInfoA";

  39. String result = WordDealUtil.wordFormat4DB(target);

  40. assertEquals("employee_info_a", result);

  41. }

  42. // 测试多个相连字母字母大写时的情况

  43. @Test

  44. public void testWordFormat4DBTogether() {

  45. String target = "employeeAInfo";

  46. String result = WordDealUtil.wordFormat4DB(target);

  47. assertEquals("employee_a_info", result);

  48. }

  49. }

从图中可以看出,TestWordDealUtil 测试类中,有6个测试方法,其中有5个测试方法都已经通过,另外一个抛出了 NullPointerException (空指针)异常,需要注意的是,这里并不是单元测试的失败(Failure),而是测试出现了错误(Error)。那么,这两种有什么区别呢?下面就讨论一下这两者的区别。

JUnit 将测试失败的情况分为两种:Failure 和 Error 。 Failure 一般是由单元测试使用的断言方法判断失败引起的,它表示在测试点发现了问题(程序中的 bug);而 Error 则是有代码异常引起的,这是测试目的之外的发现,它可能产生于测试代码本身的错误(也就是说,编写的测试代码有问题),也可能是被测试代码中的一个隐藏 bug 。不过,一般情况下是第一种情况。

深入

常用注解

  • @Before

初始化方法,在任何一个测试方法执行之前,必须执行的代码。对比 JUnit 3 ,和 setUp()方法具有相同的功能。在该注解的方法中,可以进行一些准备工作,比如初始化对象,打开网络连接等。

  • @After

释放资源,在任何一个测试方法执行之后,需要进行的收尾工作。对比 JUnit 3 ,和 tearDown()方法具有相同的功能。

  • @Test

测试方法,表明这是一个测试方法。在 JUnit 中将会自动被执行。对与方法的声明也有如下要求:名字可以随便取,没有任何限制,但是返回值必须为 void ,而且不能有任何参数。如果违反这些规定,会在运行时抛出一个异常。不过,为了培养一个好的编程习惯,我们一般在测试的方法名上加 test ,比如:testAdd()。

同时,该 Annotation(@Test) 还可以测试期望异常和超时时间,如 @Test(timeout=100),我们给测试函数设定一个执行时间,超过这个时间(100毫秒),他们就会被系统强行终止,并且系统还会向你汇报该函数结束的原因是因为超时,这样你就可以发现这些 bug 了。而且,它还可以测试期望的异常,例如,我们刚刚的那个空指针异常就可以这样:@Test(expected=NullPointerException.class)。再来看一下测试结果。


  • @Ignore

忽略的测试方法,标注的含义就是"某些方法尚未完成,咱不参与此次测试";这样的话测试结果就会提示你有几个测试被忽略,而不是失败。一旦你完成了相应的函数,只需要把 @Ignore 注解删除即可,就可以进行正常测试了。当然,这个 @Ignore 注解对于像我这样有"强迫症"的人还是大有意义的。每当看到红色条(测试失败)的时候就会全身不舒服,感觉无法忍受(除非要测试的目的就是让它失败)。当然,对代码也是一样,无法忍受那些杂乱不堪的代码。所以,建议大家都写漂亮的代码。这样人人都喜欢看你的代码。哎,有强迫症的人伤不起啊!

  • @BeforeClass

针对所有测试,也就是整个测试类中,在所有测试方法执行前,都会先执行由它注解的方法,而且只执行一次。当然,需要注意的是,修饰符必须是 public static void xxxx ;此 Annotation 是 JUnit 4 新增的功能。

  • @AfterClass

针对所有测试,也就是整个测试类中,在所有测试方法都执行完之后,才会执行由它注解的方法,而且只执行一次。当然,需要注意的是,修饰符也必须是 public static void xxxx ;此 Annotation 也是 JUnit 4 新增的功能,与 @BeforeClass 是一对。

执行顺序

所以,在 JUnit 4 中,单元测试用例的执行顺序为:



每一个测试方法的调用顺序为:


规范

最后,在来说说关于测试的规范,这些规范是从编程规则,以及日常的实践中,由那些大牛们总结出来的。作为后人的我们,在大树下乘凉的同时,更要遵守这些规则,使得大树更加茁壮成长。

  • 单元测试代码应位于单独的 Source Folder 下

此 Source Folder 通常为 test ,这样可以方便的管理业务代码与测试代码。其实,在项目管理工具 Maven 上已经做了这种规范了。在我们自己写代码时,注意一下即可。


  • 测试类应该与被测试类位于同一 package 下

便于进行管理,同时减少引入带测试类的麻烦。

  • 选择有意义的测试方法名

无论是 JUnit 4 ,还是 JUnit 3 ,单元测试方法名均需使用 test<待测试方法名称>[概要描述] ,如 public void testDivideDivisorIsZero() ,很容易知道测试方法的含义。

  • 保存测试的独立性

每项单元测试都必须独立于其他所有单元测试而运行,因为单元测试需能以任何顺序运行。

  • 为暂时未实现的测试代码忽略(@Ignore)或抛出失败(fail)

在 JUnit 4 中,可以在测试方法上使用注解 @Ignore 。在 JUnit 3 中,可以在未实现的测试方法中使用 fail("测试方法未实现"); 以告知失败是因为测试方法未实现。

  • 在调用断言(assert)方法时给出失败的原因

在使用断言方法时,请使用带有 message 参数的 API ,并在调用时给出失败时的原因描述,如 assertNotNull("对象为空", new Object())。

上述就是小编为大家分享的测试工具 JUnit 4怎么用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

测试 方法 代码 情况 单元 注解 功能 字母 版本 顺序 运行 工具 也就是 函数 原因 同时 大写 就是 时间 项目 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 中仑网络安全与数据法律评论 服务器怎么提高文件传输的速度 常用的数据库类型有哪几种 甘肃元创网络技术有限公司 苏州戴尔服务器全新配置 程序员和网络安全员哪个好 做好网络安全工作 反馈意见 大学网络安全周方案 浏览器的代理服务器怎么关闭 学校网络安全教育专题讲座 解放军 网络安全 光驱插在服务器哪里的 软件开发和通信工程 天眼查金山云网络技术有限公司 银行网络安全承诺书 oracle数据库的启停 数据库2018怎么设置外键 阿里云内网访问数据库报错 蜂鸟时序数据库 关于网络安全的司法解释有几步 数据库统一运维管理平台报价 建设银行网络安全金融日宣传 刀片服务器的优点 aov登陆时为什么服务器无响应 网络安全保卫处 票房数据库技术与应用 中断服务器是什么意思 徐汇区品牌网络技术服务批发价格 视频聊天软件开发在哪里找 中国是网络安全强国
0