`
jgnan
  • 浏览: 88758 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JUnit 4.7学习笔记(四)——Statement

阅读更多
上次说完了MethodRule之后,是时候说说Statement这个东西是怎么回事了。

首先我们来看一下org.junit.runners.BlockJUnit4ClassRunner中执行测试的核心代码:
protected void runChild(FrameworkMethod method, RunNotifier notifier) {
    EachTestNotifier eachNotifier= makeNotifier(method, notifier);
    if (method.getAnnotation(Ignore.class) != null) {
            eachNotifier.fireTestIgnored();
            return;
    }

    eachNotifier.fireTestStarted();
    try {
        methodBlock(method).evaluate();
    } catch (AssumptionViolatedException e) {
        eachNotifier.addFailedAssumption(e);
    } catch (Throwable e) {
        eachNotifier.addFailure(e);
    } finally {
        eachNotifier.fireTestFinished();
    }
}


而methodBlock()方法返回的就是Statement对象。它里面就只有一个接口方法:
package org.junit.runners.model;


/**
 * Represents one or more actions to be taken at runtime in the course
 * of running a JUnit test suite.
 */
public abstract class Statement {
    /**
     * Run the action, throwing a {@code Throwable} if anything goes wrong.
     */
    public abstract void evaluate() throws Throwable;
}


注释很直白的说明了它就是负责执行动作以及抛出相应执行过程中的异常。那实际上有多少种statement的实现,而其各自的evaluate又是在干嘛的呢?我们今天就来探讨一下。我发现所有可以在junit内部定义的内部使用的Statement包括以下几个:


它们都是在org.junit.internal.runners.statements包里面。下面简单介绍它们做的东西:
类名作用
ExpectedException用于检测标明期待出现错误的测试方法是否通过了测试(无异常抛出),或者抛出的异常和期待值不一样。
Fail直接出错,中断所有后续的步骤。
FailOnTimeout开一个线程来跑测试方法,并且通过Thread.join来判定该线程是否超时。如果出错或者超时都会认为是失败。
InvokeMethod通过映射机制执行不带参数的测试方法
RunAfters在执行完测试目标方法之后,尝试执行所有的@After和@AfterClass方法,并且把这个过程中的所有遇到的错误统一输出处理。注意@After方法是全部都会尝试执行一遍的,而不会因为中途遇到异常就会被中断。即使测试方法本身出现错误,@After和@AfterClass方法也会被执行一次!
RunBefores尝试先运行所有@BeforeClass和@Before方法,和RunAfters不一样,只要途中遇到一个方法出错就会终止连锁执行行为。


为什么Statement我只是简单介绍一下呢?因为大部分的Statement将被MethodRule机制所代替,所以大家只要了解一下个概念及其功能就好了。

下次来复习一下4.1的@RunWith标记及自定义测试运行引擎的方法(主要是很不幸我之前的学习笔记弄丢了 )
  • 大小: 3.5 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    junit4.7完整jar包

    这个jar包中的实例和源码是学习和理解Junit4.7的宝贵资源。通过查看这些示例,你可以了解到如何编写有效的测试用例,如何组织测试结构,以及如何利用Junit提供的各种工具和功能来提高测试效率。源码分析有助于深入...

    Junit 4.7完整 全面jar包

    其次,`junit-4.7-src.jar`包含的是JUnit 4.7的源代码,这对于学习和理解JUnit的工作原理非常有用。开发者可以直接查看源码,了解内部实现细节,也可以在遇到问题时参考源码寻找解决方案。这对于想要深入学习和定制...

    junit4.7及相关教程

    JUnit 4.7是这个框架的一个版本,提供了许多增强的功能和改进,使得测试更加灵活和高效。 JUnit的核心概念是测试用例(Test Case),它是测试特定功能或方法的一组相关断言(Assertion)。在JUnit 4.7中,你可以...

    junit4.7

    JUnit 4.7 是一个广泛使用的Java编程语言的单元测试框架,它极大地简化了软件开发中的测试过程。这个版本是JUnit系列的一个重要迭代,引入了许多改进和新特性,旨在提高测试的效率和覆盖率。让我们深入了解一下JUnit...

    junit4.7全套

    下面将详细介绍JUnit 4.7及其在Java开发中的应用。 1. **JUnit简介** JUnit是由Ernst Mak和Kent Beck共同创建的开源项目,它基于Java设计模式,使得编写和执行测试用例变得简单。JUnit 4.7作为早期版本4.x系列的一...

    junit-4.7.jar下载

    这里我们关注的是JUnit 4.7版本,它是一个重要的里程碑,引入了许多新特性和改进。 首先,JUnit 4.7是JUnit系列的一个升级版,它在JUnit 4的基础上进行了增强。JUnit 4相较于之前的版本,最大的改变是引入了注解...

    junit4.7.zip

    《深入理解JUnit 4.7:Java开发中的单元测试利器》 JUnit是Java开发者进行单元测试最常用的工具之一,尤其在版本4.7中,它提供了丰富的功能和改进,使得测试更加高效、易于理解和维护。本文将深入探讨JUnit 4.7的...

    junit4.7单元测试

    JUnit 4.7 是一个流行的开源测试框架,主要用于编写和执行Java程序的单元测试。它在软件开发过程中扮演着至关重要的角色,确保代码的质量和稳定性。这个版本的JUnit是在JUnit 4系列的一个更新,带来了许多改进和新...

    单元测试Junit 4.7

    文件名`junit4.7-SNAPSHOT-20090511-2347`可能指的是JUnit 4.7的一个快照版本,其中`SNAPSHOT`通常表示这是一个开发中的不稳定版本,`20090511-2347`可能是该版本的构建日期和时间。在实际开发中,为了确保稳定性,...

    Java单元测试JUnit4.7

    JUnit 4.7是该框架的一个版本,包含了对之前版本的改进和新功能。 在Java开发中,单元测试是对单个或小部分代码进行的功能验证,通常针对方法。通过单元测试,开发者可以确保代码的正确性,降低bug的出现,并且在...

    junit-4.7.jar+junit-4.7-src.jar

    同时,`junit-4.7-src.jar` 可以作为学习资料,帮助你在遇到问题时查阅源代码。 **总结** JUnit 4.7 是一个强大的单元测试框架,它的注解驱动和丰富的功能使得编写测试变得简单。这两个JAR文件的结合为开发者提供了...

    Junit4.8.2(Junit4.7)

    源代码有助于开发者理解JUnit的内部工作原理,对于学习和扩展JUnit有极大的帮助。 总结来说,JUnit 4.8.2和4.7都是强大的单元测试工具,选择4.8.2可以避免额外的库依赖问题,而4.7则适用于对老版本有特殊需求的场景...

    junit4.7以及hamcrest-core-1.3

    JUnit 4.7 和 Hamcrest-Core-1.3 是两个重要的Java单元测试工具,它们在软件开发过程中扮演着至关重要的角色。JUnit 是一个开源的、基于Java的单元测试框架,而Hamcrest是一个匹配器库,提供了丰富的断言方法,使得...

    junit-4.7.jar包

    `junit-4.7.jar`是JUnit 4.7版本的库文件,这个版本发布于2008年,是JUnit系列的一个重要里程碑。在Java开发中,单元测试是验证代码功能正确性的重要手段,它确保了每个独立的代码模块都能正常工作,为软件质量提供...

    junit 4.7 api chm 中文版

    深圳电信培训中心徐海蛟老师上课用的junit4.7 api chm 速查中文手册.吐血奉献o(∩_∩)o...哈哈

    junit4.7-SNAPSHOT-20090511-2347.rar

    这个名为"junit4.7-SNAPSHOT-20090511-2347.rar"的压缩包文件包含了JUnit 4.7的一个快照版本,发布日期为2009年5月11日,具体时间是23:47。这个版本可能是一个开发过程中的不稳定版本,"SNAPSHOT"通常表示这是一个...

    junit-4.7-src.jar

    junit-4.7-src.jar junit-4.7-src.jar junit-4.7-src.jar junit-4.7-src.jar junit-4.7-src.jar junit-4.7-src.jar junit-4.7-src.jar

    junit-4.7.jar

    junit-4.7.jar 用于java测试的包

    struts2_spring3.0_Junit4.7_Maven2.2.1_整合运行说明_培训.pdf )

    本文档主要介绍了如何将Struts2、Spring3.0、JUnit4.7和Maven2.2.1这几种技术框架整合在一起,以构建一个功能完善的Java EE项目。该文档的目标是帮助开发人员理解如何在实际项目中应用这些框架,并确保它们能够协同...

Global site tag (gtag.js) - Google Analytics