Fixture
http://www.blogjava.net/relax/archive/2007/03/05/101945.html
何
谓
Fixture?它是指在执行一个或者多个测试方法时需要的一系列公共资源或者数据,例如测试环境,测试数据等等。在编写单元测试的过程中,您会发现在大
部分的测试方法在进行真正的测试之前都需要做大量的铺垫——为设计准备 Fixture
而忙碌。这些铺垫过程占据的代码往往比真正测试的代码多得多,而且这个比率随着测试的复杂程度的增加而递增。当多个测试方法都需要做同样的铺垫时,重复代
码的“坏味道”便在测试代码中弥漫开来。这股“坏味道”会弄脏您的代码,还会因为疏忽造成错误,应该使用一些手段来根除它。
JUnit 专门提供了设置公共 Fixture 的方法,同一测试类中的所有测试方法都可以共用它来初始化 Fixture 和注销 Fixture。和编写 JUnit 测试方法一样,公共 Fixture 的设置也很简单,您只需要:
- 使用注解 org,junit.Before 修饰用于初始化 Fixture 的方法。
- 使用注解 org.junit.After 修饰用于注销 Fixture 的方法。
- 保证这两种方法都使用 public void 修饰,而且不能带有任何参数。
遵循上面的三条原则,编写出的代码大体是这个样子:
//初始化Fixture方法
@Before public void init(){……}
//注销Fixture方法
@After public void destroy(){……}
|
这样,
在每一个测试方法执行之前,JUnit 会保证 init 方法已经提前初始化测试环境,而当此测试方法执行完毕之后,JUnit 又会调用
destroy 方法注销测试环境。注意是每一个测试方法的执行都会触发对公共 Fixture 的设置,也就是说使用注解 Before 或者
After 修饰的公共 Fixture 设置方法是方法级别的(图5
)。这样便可以保证各个独立的测试之间互不干扰,以免其它测试代码修改测试环境或者测试数据影响到其它测试代码的准确性。
图5 方法级别 Fixture 执行示意图
可
是,这种 Fixture 设置方式还是引来了批评,因为它效率低下,特别是在设置 Fixture
非常耗时的情况下(例如设置数据库链接)。而且对于不会发生变化的测试环境或者测试数据来说,是不会影响到测试方法的执行结果的,也就没有必要针对每一个
测试方法重新设置一次 Fixture。因此在 JUnit 4 中引入了类级别的 Fixture 设置方法,编写规范如下:
- 使用注解 org,junit.BeforeClass 修饰用于初始化 Fixture 的方法。
- 使用注解 org.junit.AfterClass 修饰用于注销 Fixture 的方法。
- 保证这两种方法都使用 public static void 修饰,而且不能带有任何参数。
类级别的 Fixture 仅会在测试类中所有测试方法执行之前执行初始化,并在全部测试方法测试完毕之后执行注销方法(图6
)。代码范本如下:
//类级别Fixture初始化方法
@BeforeClass public static void dbInit(){……}
//类级别Fixture注销方法
@AfterClass public static void dbClose(){……}
|
图6 类级别 Fixture 执行示意图
分享到:
相关推荐
- 注解支持:JUnit 4利用Java 5的注解功能,如`@Test`用于标记测试方法,`@Before`和`@After`用于设置测试前后的准备工作(Fixture)。 - 参数化测试:允许用不同参数运行同一个测试方法,提高测试覆盖率。 - 钩子...
【追求代码质量:Junit4与TestNG的对比】 在软件开发中,代码质量的保证是至关重要的,而单元测试是确保代码质量的一种有效手段。本文主要探讨了两个流行的Java测试框架——JUnit 4和TestNG,它们都是用于编写和...
### JUnit4基础概念 #### 一、概述 在软件开发过程中,确保代码的质量与可靠性至关重要。单元测试作为软件质量保证的重要组成部分,在提高代码质量、减少bug方面扮演着不可或缺的角色。JUnit作为Java语言中...
本教程将深入介绍JUnit4的一些核心概念,包括测试方法、固件测试(Fixture)、异常测试等。 首先,让我们来看测试方法的改变。在JUnit4之前,测试类需要继承`TestCase`类,测试方法必须以"test"开头。然而在JUnit4...
JUnit4通过注解的方式来识别测试方法。目前支持的主要注解有(下列注解标示了单元测试的不同运行阶段执行的代码): @BeforeClass 全局只会执行一次,而且是第一个运行 @Before 在测试方法运行之前运行(每个测试...
JUnit是Java编程语言中最常用的单元测试框架之一,它使得开发者能够轻松地编写和运行针对代码的测试用例,确保代码的正确性和稳定性。本教程旨在深入浅出地介绍JUnit的基本概念、框架结构以及如何实际应用。 首先,...
`setUp`和`tearDown`方法用于设置和清理测试环境(fixture)。 - `TestSuite`类:组合多个测试用例,可以方便地组织和运行一组相关的测试。 - `Assert`类:提供了断言方法,如`assertTrue`、`assertEquals`等,...
6. **固定测试(Fixture)**:在Junit 3.8中,测试前后的准备和清理工作通常通过setup()和tearDown()方法实现,这些方法会在每个测试方法执行前后自动调用。 7. **测试监听器**:Junit 3.8允许我们定义测试监听器,...
在使用JUnit时,通常会创建TestCase的子类,为测试所需的环境设置(fixture)创建实例变量,并重写setUp()和tearDown()方法。setUp()方法用于在每个测试之前初始化变量,而tearDown()则负责在测试结束后释放可能占用...
随着Java 5的发布,JUnit 4引入了注解(annotation)功能,极大地提高了测试的便捷性和可读性。 **JUnit的必要性** 单元测试对于软件开发至关重要,因为它允许开发者独立验证代码的各个部分,确保每个模块的功能...
Kotlin-Fixture还提供了`FixtureRule`,这是一个JUnit规则,可以在每次测试执行前自动设置fixture,确保每个测试都有独立的测试数据。此外,它还支持Spock测试框架,方便Groovy和Kotlin混编的项目使用。 Kotlin-...
此外,NUnit的TestFixture和TestCase注解可用于组织和运行一系列相关测试,而SetUp和TearDown则可以定义测试前后的初始化和清理操作。 在C#和Java的测试实践中,经常需要进行异步操作的测试。例如,文件I/O、网络...
4. **持续集成**:结合 CI/CD 工具(如 Jenkins),可以在每次代码提交后自动触发构建和测试流程,及时发现问题并解决。 通过以上步骤,我们可以有效地管理项目版本、确保代码质量并自动化大部分重复性工作,从而极...
- **Fixture Model**:用于设置测试前后的环境状态,比如初始化数据或者清理资源。 - **Test Suite Model**:将多个测试组合在一起形成测试套件,可以一次运行多个相关的测试。 #### 四、JUnit的关键特性 - **...