`

Junit4 Fixture

阅读更多

Fixture

http://www.blogjava.net/relax/archive/2007/03/05/101945.html

何 谓 Fixture?它是指在执行一个或者多个测试方法时需要的一系列公共资源或者数据,例如测试环境,测试数据等等。在编写单元测试的过程中,您会发现在大 部分的测试方法在进行真正的测试之前都需要做大量的铺垫——为设计准备 Fixture 而忙碌。这些铺垫过程占据的代码往往比真正测试的代码多得多,而且这个比率随着测试的复杂程度的增加而递增。当多个测试方法都需要做同样的铺垫时,重复代 码的“坏味道”便在测试代码中弥漫开来。这股“坏味道”会弄脏您的代码,还会因为疏忽造成错误,应该使用一些手段来根除它。

JUnit 专门提供了设置公共 Fixture 的方法,同一测试类中的所有测试方法都可以共用它来初始化 Fixture 和注销 Fixture。和编写 JUnit 测试方法一样,公共 Fixture 的设置也很简单,您只需要:

  1. 使用注解 org,junit.Before 修饰用于初始化 Fixture 的方法。
  2. 使用注解 org.junit.After 修饰用于注销 Fixture 的方法。
  3. 保证这两种方法都使用 public void 修饰,而且不能带有任何参数。

遵循上面的三条原则,编写出的代码大体是这个样子:

//初始化Fixture方法
@Before public void init(){……}

//注销Fixture方法
@After public void destroy(){……}

 

这样, 在每一个测试方法执行之前,JUnit 会保证 init 方法已经提前初始化测试环境,而当此测试方法执行完毕之后,JUnit 又会调用 destroy 方法注销测试环境。注意是每一个测试方法的执行都会触发对公共 Fixture 的设置,也就是说使用注解 Before 或者 After 修饰的公共 Fixture 设置方法是方法级别的(图5 )。这样便可以保证各个独立的测试之间互不干扰,以免其它测试代码修改测试环境或者测试数据影响到其它测试代码的准确性。


图5 方法级别 Fixture 执行示意图
图5 方法级别 Fixture 执行示意图

可 是,这种 Fixture 设置方式还是引来了批评,因为它效率低下,特别是在设置 Fixture 非常耗时的情况下(例如设置数据库链接)。而且对于不会发生变化的测试环境或者测试数据来说,是不会影响到测试方法的执行结果的,也就没有必要针对每一个 测试方法重新设置一次 Fixture。因此在 JUnit 4 中引入了类级别的 Fixture 设置方法,编写规范如下:

  1. 使用注解 org,junit.BeforeClass 修饰用于初始化 Fixture 的方法。
  2. 使用注解 org.junit.AfterClass 修饰用于注销 Fixture 的方法。
  3. 保证这两种方法都使用 public static void 修饰,而且不能带有任何参数。

类级别的 Fixture 仅会在测试类中所有测试方法执行之前执行初始化,并在全部测试方法测试完毕之后执行注销方法(图6 )。代码范本如下:

//类级别Fixture初始化方法
@BeforeClass public static void dbInit(){……}
	
//类级别Fixture注销方法
	@AfterClass public static void dbClose(){……}



图6 类级别 Fixture 执行示意图
图6 类级别 Fixture 执行示意图

分享到:
评论
2 楼 qq262549820 2011-03-04  
引用
[/dsfdsfq
1 楼 qq262549820 2011-03-04  
[url][/url][flash=200,200][/flash]
111sfsdsdf[u][/u]
引用

相关推荐

    junit-4.13.2的压缩包,JUnit是Java编程语言的单元测试框架,用于编写和可重复运行的自动化测试

    JUnit4通过注解的方式来识别测试方法。目前支持的主要注解有(下列注解标示了单元测试的不同运行阶段执行的代码): @BeforeClass 全局只会执行一次,而且是第一个运行 @Before 在测试方法运行之前运行(每个测试...

    junit(单元测试)入门

    Junit4引入的是类级别的夹具,编写规范如下: ①创建测试用例的实例 ②使用注解BeforeClass修饰用于初始化夹具的方法 ③使用注解AfterClass修饰用于注销夹具的方法 ④保证这两种方法都使用public static void 修饰,...

    追求代码质量:JUnit4与TestNG的对比

    JUnit4具有基于注释的新框架,它包含了TestNG一些最优异的特性。但这是否意味着JUnit4已经淘汰了TestNG?AndrewGlover探讨了这两种框架各自的独特之处,并阐述了TestNG独有的三种高级测试特性。 经过长时间积极的...

    JUnit4详细教程1

    2.固件测试 所谓固件测试(Fixture),就是测试运行运行程序(test runner)会在测试方法之前自动初始化、和回收资源的工作 3.异常测试 因为使用

    廖雪峰 Java 教程.doc

    廖雪峰 Java 教程 Java教程 Java快速入门 Java简介 安装JDK 第一个Java程序 Java代码助手 使用IDE ...使用Log4j ...使用SLF4J和Logback ...编写JUnit测试 使用Fixture 异常测试 条件测试 参数化测试

    unittest较为详细的解析.docx

    unittest中有4个重要的概念:test fixture, test case, test suite, test runner Testcase: 一个TestCase的实例就是一个测试用例。什么是测试用例呢?就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),...

    使用TestNG-Abbot实现自动化GUI测试

    Abbot是一种JUnit扩展框架,主要目的是使GUI组件实现编程隔离,它还提供了一种验证GUI行为的简易方法。TestNG-Abbot是一种测试框架,它为GUI组件的测试带来了新的活力。本文介绍使用TestNG-Abbot测试GUI过程中难度...

    Python自动化测试框架之pytest详解

    能学到什么:学习pytest的安装、配置,pytest fixture的使用,pytest的高阶用法如跳过测试函数、标记为预期失败函数、函数数据参数化、修改 Python traceback 输出、执行失败的时候跳转到 PDB、设置断点、获取用例...

    华为五年自动化测试工程详细解说:unittest单元测试框架

    (1) test fixture(测试固件):一个测试固件代表一个或多个测试执行前的准备工作和测试结束后的清理工作,例如:创建数据库连接、关闭数据库连接、启动服务进程、测试环境的清理等。 (2) test suite(测试套件):...

    Python自动化之UnitTest框架实战记录

    UnitTest 框架是 Python 自带的一个作为单元测试的测试框,相当于 Java中的 JUnit,随着自动化技术的成熟,UnitTest 成为了测试框架第一选择,可以完整的结合 Selenium、Requests 来实现 Ul 和接口的自动化,由 ...

    开放源码C/C++单元测试工具,第2部分:了解CppUnit

    内容下载和安装CppUnit使用CppUnit创建基本测试使用断言再次测试字符串类组织新测试使用fixtures定制测试创建不使用宏的测试...本文介绍一些比较有用的CppUnit特性,比如TestCase、TestSuite、TestFixture、TestRunn

    JBuilder2005单元测试之创建测试固件

    JBuilder提供了3个预定义的测试固件类,它们分别是: ·JDBC测试固件(JDBC Fixture):用于获取数据库连接的测试固件,用户仅需要通过设置一些数据库信息,就可以用方便的方法获取数据连接。 ·JNDI 测试固件(JNDI ...

    单元测试UnitTest+Pytest【Selenium3】

    就像JUnit是Java语言的标准单元测试框架一样,unittest(PyUnit)则是Python语言的标准单元测试框架。unittest可以组织执行测试用例,并且提供了丰富的断言方法,可以判断测试用例是否通过,最终生成测试结果。用...

    Python unittest单元测试框架总结

    (4)输入非数值类型,比如None、[]、{}、期待抛出TypeError 把上面这些测试用例放到一个测试模块里,就是一个完整的单元测试  unittest工作原理 unittest中最核心的四部分是:TestCase,TestSuite,TestRunner,...

    hsac-fitnesse-fixtures:定义和运行集成测试的环境。 它包含Fitnesse固定装置(基本)类和基线FitNesse安装

    在构建服务器上运行FitNesse测试,以JUnit XML格式和HTML报告结果。 可添加其他Wiki功能(随机值,计算相对日期,无需指定所有参数的Slim方案,在每个步骤后都需要截图的Slim脚本)。 ,结合了以下方面,改善了Wiki...

    Test-Driven+Development+By+Example-测试驱动开发【高清+有目录+可搜索+可编辑】

    第4 章私有性······························································································...

Global site tag (gtag.js) - Google Analytics