Junit4基本常识

JUnit4通过Java5注释引入了一系列新特性,包括参数化测试、异常测试、超时测试等,使得测试更加灵活高效。它摒弃了严格的命名规范和继承要求,通过注解实现了测试方法的标识,提供了更为简洁的文档化方式。
摘要由CSDN通过智能技术生成

借助 Java 5 注释,JUnit 4 比从前更轻(量级),也更加灵活。JUnit 4 放弃了严格的命名规范和继承层次,转向了一些令人激动的新功能。下面是一份关于 JUnit 4 新功能的快速列表:

  • 参数测试
  • 异常测试
  • 超时测试
  • 灵活固件
  • 忽略测试的简单方法
  • 对测试进行逻辑分组的新方法

首先,我要解释 JUnit 4 最重要最令人激动的改变,为在稍后的章节中介绍这些功能和更多新功能做好准备。

摒弃旧规则

在将 Java 5 注释添加到 JUnit 4 之前,该框架已经建立起两条对其运行能力至为重要的规则。第一条规则是:JUnit 明确要求任何作为逻辑测试而编写的方法要以 test 这个词开头。任何以该词开头的方法,如 testUserCreate,均应按照一个定义良好的测试过程来执行,从而保证固件在测试方法前和测试方法后均要执行。第二条规则:为了让 JUnit 识别包含测试的类对象,要求类本身从 JUnit 的 TestCase (或它的一些派生类)中扩展。破坏了这两条规则中任意一条规则的测试将不会运行。

引入新方法

JUnit 4 使用 Java 5 注释来彻底淘汰了这两条规则。现在,不再需要类层次,而且那些想要实现测试功能的方法只需要用一个新定义的 @Test 注释来修饰就可以了

简化文档

注释的一个有用的副作用是它们将方法要做的事明确地文档化,而不 需要对该框架的内部模型有深入的理解。还有什么比用 @Test 修饰测试方法更简洁明了的呢?这是对旧版 JUnit 的巨大改进,旧版 JUnit 要求您对 JUnit 规范要相当熟悉,即使您想要的仅仅是理解每个方法对一个完整测试用例的贡献。

在解析已经写好的测试方面,注释能提供很多帮助,但当您看到注释为编写测试的过程带来的额外帮助后,就会更被它们所吸引。

异常测试

在以往的 JUnit 版本中,指定测试抛出 Exception 通常都是一个很好的做法。只有在测试一个特别的异常时,才会想要忽略这条规则。如果测试抛出一个异常,该框架会报告一次失败。如果真的想要测试一个特别的异常,JUnit 4 的 @Test 注释支持一个 expected 参数,该参数意在表示测试在执行中抛出的异常类型。

超时测试

在 JUnit 4 中,测试用例可以将超时值作为参数。正如在清单 6 中所见,timeout 值代表测试能够运行的最长时间:如果时间超过,测试就会失败。

忽略测试

在 JUnit 4 以前,忽略坏掉的或不完整的测试让人很头疼。如果想让框架忽略一个特别的测试,不得不修改测试名,故意不让它遵循测试的命名规则。例如,我经常把一个 “_” 放到测试名前面,来提示该测试不在当前运行。JUnit 4 引入了一个被适当命名为 @Ignore 的注释,它迫使该框架忽略掉一个特别的测试方法。也可以传入一条消息来向恰巧进行这项忽略测试的可信的开发人员传达您的决定。

测试固件

测试固件并不是 JUnit 4 的新功能,但固件模型却是新的且改良过的。在本节中,我会解释为何及在何处需要使用固件,然后介绍旧版的不灵活固件与 JUnit 4 中大放异彩的新模型之间的区别。

为什么使用固件?

固件通过一个契约来倡导重用,该契约确保该特殊逻辑在测试之前或之后运行。在旧版的 JUnit 中,不管是否实现一个固件,这个契约都是隐式的。但 JUnit 4 却通过注释将固件显式化,这意味着只有在您真的决定使用固件时,该契约才成为强制的。

通过一个确保固件能在测试之前或之后运行的契约,可以编码可重用逻辑。例如,这种逻辑可能是初始化一个将在多个测试用例中测试的类,也可能是在运行一个数据依赖测试前填充数据库。不论是哪一种逻辑,使用固件都会确保一个更容易管理的测试用例:依赖于普通逻辑的测试用例。

当运行许多使用相同逻辑的测试,且一些测试或全部测试失败时,固件会变得特别方便。与其在每个测试设置的逻辑间切换,不如只在一个地方归纳导致失败的原因。除此之外,如果一些测试通过而另一些失败,您就能避免将该固件逻辑作为全部失败的源头来检查。

4.0 版中的灵活性

JUnit 4 使用注释来减少固件花费的成本,允许为每个测试运行一次固件,或为整个类运行一次固件,或一次也不运行。有四种固件注释:针对类层次的固件有两种,针对方法层次的固件有两种。在类层次,有 @BeforeClass 和 @AfterClass,在方法(或测试)层次,有 @Before 和 @After。

两个新注释

在 JUnit 4 中,套件语义被两个新注释所替代。第一个是 @RunWith,设计它是为了方便让不同的运行器(除了构建进框架的运行器)执行一个特别的测试类。JUnit 4 绑定一个叫做 Suite 的套件运行器,必须在 @RunWith 注释中指定这个运行器。不仅如此,还必须提供另一项叫做 @SuiteClasses 的注释,它将一个意欲表示测试套件的类列表作为参数。

Ant 和 JUnit 4

现在,Ant 和 JUnit 成为完美组合已久,许多开发人员预料这种关系在引入 JUnit 4 后只会变得更好。但结果是,存在一定问题。如果您正在运行 Ant 1.7 之前的任何版本,将不能轻易地运行现成的 JUnit 4 测试。那并不是说您不能运行这些测试 —— 而只是不能立刻运行这些测试。

参数测试

偶尔,应用程序的业务逻辑要求您编写许多不定量的测试来保证其健壮。在 JUnit 之前的版本中,这种场景很不方便,主要是因为一个测试中方法的参数组各不相同,意味着要为每一个单独的组编写一个测试用例。

JUnit 4 引入了一项卓越的新功能,即能够创建由参数值供给的通用测试。结果是,您可以创建一个单个的测试用例并多次运行 —— 为您创建的每个参数运行一次。

参数的简洁性

在 JUnit 4 中创建参数测试只需要五个步骤:

  1. 创建一个不含参数的通用测试。
  2. 创建一个返回 Collection 类型的 static feeder 方法,并用 @Parameter 注释加以修饰。
  3. 为在步骤 1 中定义的通用方法所要求的参数类型创建类成员。
  4. 创建一个持有这些参数类型的构造函数,并把这些参数类型和步骤 3 中定义的类成员相应地联系起来。
  5. 通过 @RunWith 注释,指定测试用例和 Parameterized 类一起运行。

 

原文地址:http://www.ibm.com/developerworks/cn/education/java/j-junit4/section8.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值