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

从JUnit到Rspec的尝试

阅读更多

如今,各种测试框架层出不穷,每一种框架都有其独特性以及各自的优势。本人由于工作的原因,分别先后接触了JUnit以及Respec两套测试框架,虽然研究的不深,但也就这两套框架谈一谈自己的理解。重点主要针对于Rspec框架。

JUnit介绍    

 众所周知,JUnit是一个用Java编写而成的单元测试框架。利用JUnit,我们可以通过编写简单的测试代码,方便的进行白盒测试,也可以说:在了解了被测代码如何工作的前提下,对其内部结构的正确性进行自动化的测试。在JUnit的官网上,我们可以看到有关JUnit更为正统的释义——JUnit是一个开放源代码的简单框架,用来编写和运行可重复的测试(也被称为回归测试)。它是致力于单元测试框架的XUnit架构的一种实现。其中包含了:

1.用于检测预期结果的Assertions

2.用于共享测试数据的Test Fixtures

3.用于运行测试的Test Runners

    在使用JUnit时,其主要投放场景是:a.与开发人员约定好要测的内部方法、或是对外接口(方法名称、参数个数、参数类型等),两边同时开工,开发提测,运行JUnit测试代码。b.根据开发已写好的代码,编写测试代码,校验其正确性。这两种情景都很常见,具体采用哪种,视时间宽松程度而定。

    由于JUnit在很多平台工具上的集成(ANT,Maven,Eclipse,IntelliJ IDEA等),以及配有大量的插件(dbUnit,xmlUnit等),以及其易用性,使其仍是当今单元测试框架的首选。

Rspec介绍    

    前不久,由于需要对Kelude平台建立起一套测试体系,于是便研究起来Respec这一BDD测试框架。说起BDD,我想大家都不陌生,其英文全称为Behaviour Driven Development,即行为驱动开发。Respec就是Ruby社区中最为流行的行为驱动测试框架。关于BDD更详细的介绍,大家可以参考http://qa.taobao.com/?p=11630这篇文章,这里就不再过多介绍。

    要想真正用好Respec,就要遵循其背后的测试思想——测试先行。这也是与JUnit等单元测试框架最大的不同之处。所谓测试先行,就是要求我们,在开发人员编码工作之前,先写好测试用例,然后由测试来推动开发工作。通俗解释为:在设计实现一个功能之前,先考虑好如何来测试这个功能,测试的代码完成后,再编写功能实现代码,并且使得该测试用例运行通过,即完成了系统的一个功能模块。这与通常的JUnit使用场景背道而驰。

    如果在接触Respec的初期,就要求编写Respec测试用例,和编写功能代码的人员角色分开,我想这对于开发人员来说,应该是非常被动和痛苦的,同时也会很大程度上限制开发人员的创造性。因为功能代码的编写目的由原来的实现功能,变为了如今的通过测试用例,无论如何对于开发人员都是一种挑战。因此,初期尝试Respec阶段,我建议测试用例和功能代码的编写都由一个人来承担。也就是说,自己根据业务需求,先写好Respec测试用例,然后再编写功能代码,而编写功能代码的目的就是为了通过测试。这样做的好处,不仅可以最大程度的理解Resepc背后的思想,同时也会逼迫开发人员为了满足易测性,从而写出简洁高质量的代码。这些优点,只有真正尝试过Respec后,才会深有感触。

   Respec在Rails框架中,不仅能针对MVC的Controller层、Model层、View层,进行分层测试,同时也可以针对例如路由等其它层面进行测试,可以说是功能非常全面。

Rspec初体验

    最后,针对于Rails应用搭建Respec环境、以及一些常用的插件做一下简短介绍:

 1.假设Ruby、Rails环境均已安装完成,安装Rspec插件

     gem install rspec

 2. 安装测试数据准备工具Factory Girl

      gem install factory_girl_rails

 3. 安装测试脚本对代码覆盖率的检测工具RCov

      gem install rcov

以上三步安装了进行Respec测试最常用的几个工具。

所有测试代码放在spec目录下,并且与功能代码的目录结构相对应。

下面附上一个Rspec代码文件:

 

如上图:

let 方法主要针对数据准备声明

Factory :XXX 从FactoryGirl 插件中取出预先准备好的数据

describe 对应于一个测试集

it 对应于一个测试用例

 

    每个测试集和测试用例都配有各自的描述信息(测试集名、用例名),这些都是写进测试代码中的,这样做,不仅增加了代码的可读性,同时在执行用例时,一旦用例报错,可以很方便的查看到是对应于哪一部分业务规则的代码出了问题。在测试用例中用通用语言把系统的行为描述出来,把测试代码作为系统的定义文档,将系统的设计和测试用例结合起来,这即是BDD所倡导的。

 

    当想查看测试用例脚本对于功能代码的覆盖情况时,我们可以使用RCov这个工具,通过它,不仅可以通过命令行的形式查看到覆盖率数据,也可以以HTML网页形式查看,非常清晰、具体。

0
0
分享到:
评论

相关推荐

    rspec_junit_formatter, RSpec结果格式化为你的CI可以读取的JUnit.zip

    rspec_junit_formatter, RSpec结果格式化为你的CI可以读取的JUnit RSpec JUnit格式化程序 RSpec 2 & 3结果, Jenkins可以读取。 可能还有其他的CI服务。灵感来自于的工作,在的RSpec格式化程序在对 Reporter的失望...

    junit5.rar包含JUnit Platform + JUnit Jupiter + JUnit Vintage依赖jar包

    JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage,包含依赖包:junit-jupiter-5.5.1.jar,junit-jupiter-engine-5.5.1.jar,junit-jupiter-params-5.5.1.jar,junit-platform-launcher-1.5.1.jar,junit-...

    junit5.jar

    使用"junit5.jar"进行测试,需要将其添加到项目的类路径中。在Maven或Gradle项目中,可以通过配置依赖来实现。例如,在Maven的pom.xml文件中添加以下依赖: ```xml <groupId>org.junit.jupiter <artifactId>...

    junit4.1 junit4.1

    junit4.1junit4.1junit4.1junit4.1junit4.1

    junit的jar包

    Files contained in junit4-4.8.2.jar: LICENSE.txt META-INF/MANIFEST.MF junit.extensions.ActiveTestSuite.class junit.extensions.RepeatedTest.class junit.extensions.TestDecorator.class junit.extensions...

    JUnit in Action 3nd Edition

    JUnit的历史可以追溯到1997年,当时Kent Beck和Eric Gamma创立了JUnit。JUnit的第一个版本是JUnit 1.0,后来陆续发布了多个版本,如JUnit 3.8、JUnit 4.0、JUnit 4.11等。2015年,JUnit 5发布,带来了许多新的特性和...

    JUnit API JUnit API

    JUnit API JUnit API JUnit API JUnit API JUnit API

    Junit4.12和依赖包

    例如,使用Maven或Gradle作为构建工具,它们可以从镜像站点或第三方库(如阿里云的Maven仓库)下载所需的Junit4.12及其依赖。在Maven的pom.xml文件中添加以下依赖: ```xml <groupId>junit <artifactId>junit ...

    JUnit3.8.1 以及使用JUnit测试的代码demo

    在实际应用中,开发者通常会使用构建工具(如Maven或Gradle)配合JUnit进行自动化测试,这使得测试能够集成到开发流程中,并且可以在每次代码修改后自动运行。JUnit的结果可以通过测试报告展示,帮助开发者快速定位...

    Junit5.zip

    对于初学者,建议先从`demo-junit-5-master.zip`开始,通过实例学习JUnit5的基本用法,然后逐步深入到源代码和高级特性。对于有经验的开发者,`junit5.jar`和`junit5-r5.4.0.zip`将有助于理解和定制JUnit5的运行行为...

    Junit5依赖整合包

    Junit5是Java开发中最常用的单元测试框架之一,它的出现为开发者提供了更加高效、灵活的测试体验。相较于之前的版本,Junit5引入了许多新的特性和改进,使得测试代码的编写和维护变得更加简单。本整合包包含了Junit5...

    Junit5.7.2离线jar

    @ParameterizedTest支持参数化的测试,可以从数据源获取多组输入,执行相同测试逻辑但使用不同参数。 在Spring框架的上下文中,JUnit5可以很好地与Spring Test集成,允许我们在测试中注入依赖并管理Spring应用程序...

    junit-jupiter-5.5.1.rar

    JUnit5相关的 JUnit Jupiter.jar依赖包,主要包含: junit-jupiter-5.5.1.jar,junit-jupiter-api-5.5.1.jar,junit-jupiter-engine-5.5.1.jar,junit-jupiter-params-5.5.1.jar,junit-jupiter-api-5.4.2.jar,...

    junit工具jar包

    当您下载并导入这个“junit4.8.1”jar包到项目中时,您就能利用JUnit的功能来编写和运行测试代码。 首先,关于如何使用JUnit,你需要将jar包添加到项目的类路径中。在IDE如Eclipse或IntelliJ IDEA中,可以直接将jar...

    junit安装告诉读者如何安装junit

    你可以尝试运行自带的测试用例,例如junit.tests.extensions.ActiveTestTest,以检查JUnit是否可以正常工作。 JUnit的核心价值在于它是一个回归测试框架,这意味着开发者可以在开发过程中不断对代码进行测试、调试...

    JUnit in action JUnit Recipies

    《JUnit in Action》和《JUnit Recipes》是两本关于Java单元测试的重要书籍,它们深入浅出地介绍了如何使用JUnit框架进行高效、可靠的测试。JUnit是一个流行的开源测试框架,广泛用于Java应用程序的单元测试,它提供...

    Junit5.jar包,代码测试工具

    为了在项目中使用JUnit5,你需要将`junit-jupiter-engine`和`junit-platform-launcher`依赖添加到你的构建系统中。例如,在Maven项目中,可以在`pom.xml`中添加以下依赖: ```xml <groupId>org.junit.jupiter ...

    junit3.8 和junit4 api

    在从JUnit 3.8升级到JUnit 4时,开发者需要注意的是API的改变,尤其是依赖于`setUp`和`tearDown`方法的代码。此外,新的注解提供了更强大的功能,但也需要学习和适应。 总结来说,JUnit 4通过注解和更多的灵活性...

    junit4 jar包

    在Java项目中,将这两个jar包添加到类路径后,开发者就可以编写JUnit测试了。测试类通常会继承自`org.junit.Test`,并包含一系列的测试方法。测试运行器(如JVM内置的`JUnitCore`或IDE集成的测试运行器)会发现这些...

    junit测试_java_JUnit_JUnit测试_

    JUnit是Java编程语言中最常用的单元测试框架之一,它允许开发者编写可执行的测试用例来验证代码的功能。单元测试是对程序中的最小可测试部分——通常是一个函数或方法——进行检查,确保其按照预期工作。JUnit作为...

Global site tag (gtag.js) - Google Analytics