阅读更多

4顶
0踩

编程语言

原创新闻 JDave - Java的行为驱动编程框架

2007-11-21 21:28 by 见习编辑 robbin 评论(4) 有29728人浏览
BDD,即行为驱动编程,是TDD的一个改进版本,BDD本质上也是TDD,但是比TDD要更加自然一些,更DSL化,通过定义一个一个具体可执行的Behavior来驱动软件的开发过程。如果你是一个Ruby程序员的话,那么你一定会发现RSpec已经提供了良好的BDD编程框架。我们正在开发当中的JavaEye3.0网站就是使用了rspec来编写系统的behavior,来驱动编程和单元测试。

不过如果你是一个Java程序员,那么你现在不需要再羡慕Ruby程序员了,因为JDave已经提供了类似rspec的功能。JDave同时也集成了JMock库作为mock实现,下面我们看一个简单的例子:

import jdave.Block;
import jdave.Specification;
import jdave.junit4.JDaveRunner;

@RunWith(JDaveRunner.class)
public class StackSpec extends Specification<Stack<?>> {
    public class EmptyStack {
        private Stack<String> stack;

        public Stack<String> create() {
            stack = new Stack<String>();
            return stack;
        }

        public void isEmpty() {
            specify(stack, must.be.empty());
        }

        public void isNoLongerEmptyAfterPush() {
            stack.push("anything");
            specify(stack, must.not().be.empty());
        }
    }

    public class FullStack {
        private Stack<Integer> stack;

        public Stack<Integer> create() {
            stack = new Stack<Integer>(10);
            for (int i = 0; i < 10; i++) {
                stack.push(i);
            }
            return stack;
        }

        public void isFull() {
            specify(stack, must.be.full());
        }

        public void complainsOnPush() {
            specify(new Block() {
                public void run() throws Throwable {
                    stack.push(100);
                }
            }, should.raise(StackOverflowException.class));
        }
        
        public void containsAllItems() {
            for (int i = 0; i < 10; i++) {
                specify(stack, contains(i));
            }
        }
        
        public void doesNotContainRemovedItem() {
            stack.remove(3);
            specify(stack, does.not().contain(3));
        }
        
        public void containsAllButRemovedItem() {
            stack.remove(3);
            specify(stack, containsExactly(0, 1, 2, 4, 5, 6, 7, 8, 9));
        }
    }

    public class StackWhichIsNeitherEmptyNorFull {
        private Stack<Integer> stack;

        public Stack<Integer> create() {
            stack = new Stack<Integer>();
            for (int i = 0; i < 10; i++) {
                stack.push(i);
            }
            return stack;
        }

        public void addsToTheTopWhenSentPush() {
            stack.push(100);
            specify(stack.peek(), must.equal(100));
        }
    }
}


每个方法实际上也是单元测试,但是并不是使用junit习惯的assert方法,而是specify,断言使用的是mast,containsExactly,should等比较口语化的方法名称。

JDave是一个非常好的尝试,对于不喜欢assert风格的用户不妨尝试尝试,从我们rspec的使用经验来看,写BDD的example要比写TDD的test更加自然一些。

JDave主页:

http://www.jdave.org/
4
0
评论 共 4 条 请登录后发表评论
4 楼 liyun_1981 2009-12-03 16:48
行为驱动倒是自然得好,有时间看看Specification类的源代码,感觉蛮和我口味的,呵呵。
3 楼 Jekey 2007-11-27 10:03
看到assert就郁闷啊,我们还都一直用java1.4版本呢
2 楼 pf_miles 2007-11-22 11:02
....
不好意思,记错了,套里面是可以的...
1 楼 pf_miles 2007-11-22 10:58
看了吓一跳...public class里面套public class能编译通过么?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 学习笔记之bdd行为驱动开发,lettuce框架入门

    基本python语言的lettuce框架 ...BDD包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。 需要用pip去安装lettuce pip install lettuce 主流BDD框架: Cucumber(ruby) h...

  • 敏捷测试的思考和新发展

    从2003年开始,人们逐渐实践TDD,而ATDD 是在2007年Lasse Koskela写了一本书《测试驱动:Java开发人员的TDD和ATDD》 ,才开始引起大家的更多关注。从那时算起也有四年了,但在国内,则是最近一两年的事。当然,我们...

  • 高效的敏捷测试第八课 静态测试工具和生成测试报告

    第18讲:增加自动的静态测试和测试... ATDD/BDD 自动化测试框架:Robot Framework、Ginkgo、Cucumber、JBehave/ NBehave / CBehave、SpecFlow、RSpec、JDave、Chakram(REST API)、Concordion、Fitnesse、Guage 等。 ...

  • 测试设计的初探

    测试设计的初探 TDD:测试驱动开发(Test-Driven Development) BDD:行为驱动开发(Behavior Driven Development) ATDD:验收测试驱动开发(Acceptance Test Driven Development) DDD:领域...

  • BDD、TDD、ATDD的对比区别(译文)

    本指南旨在描述不同的测试方法或实践,例如行为驱动开发(BDD)、测试驱动开发(TDD)、 验收测试驱动开发(ATDD)。它还将描述这些技术之间的主要区别。在文章最后,将描述它们是怎样工作的,它们的关键差异以及在开发...

  • 流行的软件测试工具介绍

    行为驱动 Python: behave, Lettuce、pytest-bdd、lettuce_webdriver、expects、ensure、behave-django、Morelia  Ruby: Cucumber, Spinach Java: JBehave, JDave, Cucumber C#: NBehave, SpecFlow, ...

  • 敏捷测试的思考和新发展(转载)

    从2003年开始,人们逐渐实践TDD,而ATDD 是在2007年Lasse Koskela写了一本书《测试驱动:Java开发人员的TDD和ATDD》 ,才开始引起大家的更多关注。从那时算起也有四年了,但在国内,则是最近一两年的事。当然,我们...

  • 测试行业2018年报告总结

    行为驱动开发/集成测试工具 1)cucumber 2)jdave 3)easyb 影响测试效果的技术障碍 1)需求不够完整、不清晰、不规范 2)需求管理不好,导致测试资产和测试需求无法保持一致 3)缺少前端测试分析、测试设计过程,...

  • WebAudioAPIError(解决方案).md

    项目中常见的问题,记录一下解决方案

  • avnet(安富利)网站详情页数据样例

    avnet(安富利)网站详情页数据样例

  • 1-全国各地区建筑业-二级专业承包建筑业企业利润总额2005-2012年-社科数据.zip

    该数据集涵盖了2005至2012年间全国各地区二级专业承包建筑业企业的利润总额。这些数据不仅包括了原始数据,还提供了线性插值和ARIMA填补的版本,以便于研究者能够根据不同的需求选择合适的数据形式进行分析。数据集中包含了行政区划代码、地区名称、是否属于长江经济带、经纬度信息、年份以及利润总额等关键指标。这些指标为评估企业的经营效益和盈利水平提供了重要依据,同时也反映了建筑业在不同地区的发展态势。数据来源为国家统计局,确保了数据的权威性和准确性。通过这些数据,研究者可以深入分析建筑业的经济贡献及其在宏观经济中的作用,为政策制定和行业规划提供数据支持。

  • CentOS6.4X64安装Oracle11g中文2.05MB最新版本

    本文档主要讲述的是CentOS6.4 X64安装Oracle11g;在CentOS安装oracle11g比安装oracle10g简单很多,oracle可以不设置比如OS内核参数、防火墙、环境变量等,所以实施时推荐安装oracle11g。感兴趣的朋友可以过来看看

  • 发动机零部件质量信息反馈及处理表.docx

    发动机零部件质量信息反馈及处理表.docx

  • 1-全国省市县土地利用类型面板数据2009-2021年-社科数据.zip

    全国省市县土地利用类型面板数据2009-2021年是一项详尽的数据集,它基于土地利用方式和地域差异,对土地资源单元进行细致划分,反映了土地的用途、性质和分布规律。该数据集涵盖了全国各省、地级市、县的土地利用类型,包括耕地、园地、林地、交通运输用地、水域及沙地等多种土地类型。时间范围上,省级和地级市的土地利用类型面板数据覆盖2009至2021年;县级土地利用类型面板数据则从2019年开始至2021年。数据指标丰富,包括行政单位、年份以及各类土地利用的具体分类,如水田、水浇地、旱地、果园、茶园等,以及城镇村及工矿用地、交通运输用地、水域及水利设施用地等。这些数据为政府决策、规划编制以及土地资源管理提供了坚实的数据基础,有助于全面了解土地资源的利用状况,并为未来的规划和管理提供支持。

  • MediaError(解决方案).md

    项目中常见的问题,记录一下解决方案

  • 前端跳槽突围课:React18底层源码深入剖析(完结21章)

    好课分享——前端跳槽突围课:React18底层源码深入剖析(完结21章)

  • 1111java后端1111Controller

    1111java后端1111Controller

  • 嵌入式系统开发-STM32单片机-电子春联-代码设计

    嵌入式系统开发-STM32单片机-电子春联-代码设计

  • 潜在失效模式及后果分析(FMEA)应用流程.docx

    潜在失效模式及后果分析(FMEA)应用流程.docx

  • 使用Python和Matplotlib创建动态3D圣诞树动画

    内容概要:本文详细介绍了如何使用Python和Matplotlib库创建一个动态的3D圣诞树动画。通过代码示例,展示了几何形状的创建方法,如圣诞树的形状、装饰品和星星的位置计算,以及如何通过动画更新函数实现闪烁效果。 适合人群:具有一定Python编程基础的开发者,尤其是对Matplotlib库和数据可视化感兴趣的读者。 使用场景及目标:① 学习Matplotlib库的基本用法,包括3D绘图和动画制作;② 掌握几何形状的数学建模方法,如圆锥和球体;③ 实践动画效果的实现技巧,提升编程技能。 阅读建议:本教程以具体代码示例为主,理论与实践相结合。建议读者在阅读过程中亲自编写和运行代码,逐步理解每一步骤的实现细节。

Global site tag (gtag.js) - Google Analytics