阅读更多

4顶
0踩

编程语言

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

2007-11-21 21:28 by 见习编辑 robbin 评论(4) 有30515人浏览
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)缺少前端测试分析、测试设计过程,...

  • 全国计算机等级考试二级openGauss数据库程序设计样题解析

    主要内容涵盖单选题和操作题两大部分。单选题涉及openGauss数据库的基本概念、数据模型、SQL语法、事务管理和用户权限等方面的知识点。操作题则围绕一个名为bookdb的图书购买信息数据库展开,具体任务包括插入图书信息、更新顾客信息、删除购买记录、查询特定图书信息以及创建视图、存储过程和触发器等实际操作。每道题目均附带详细的解题步骤和最终答案。

  • 新建 Microsoft Word 文档 (9).docx

    新建 Microsoft Word 文档 (9).docx

  • Delphi 12.3控件之nrCommLib Pro v9.54 Full Source for D10.3-D12.7z

    Delphi 12.3控件之nrCommLib Pro v9.54 Full Source for D10.3-D12.7z

  • 三菱PLC FX5U控制四轴伺服系统:硬件配置、参数设置及运动控制详解

    内容概要:本文详细介绍了使用三菱PLC FX5U控制四轴伺服系统的全过程,涵盖硬件配置、电气接线、参数设置以及运动控制逻辑。硬件方面,选用三菱FX5U-64MT作为主控制器,搭配四个MR-JE-20A伺服驱动器和其他必要组件。软件部分则深入探讨了轴参数初始化、原点回归、多轴联动、HMI界面设计及报警处理等关键技术环节。特别针对旋转轴的特殊处理进行了详细说明,如双速原点回归、绝对定位指令的应用等。此外,还提供了调试经验和优化技巧,确保系统的高精度和平稳运行。 适合人群:从事自动化控制系统设计、调试的技术人员,尤其是对三菱PLC和伺服系统有一定了解的研发人员。 使用场景及目标:适用于工业自动化领域的四轴伺服控制系统开发,旨在帮助工程师掌握从硬件选型到软件编程的一整套解决方案,提高项目的成功率和技术水平。 其他说明:文中附有多份参考资料,包括完整的程序文件、界面工程、CAD接线图和伺服参数清单,便于读者进行实际操作和验证。

  • 分阶段学习:先掌握基础,再深入细分领域 理论与实践结合:学完算法后立刻用代码实现 保持持续学习:AI技术迭代快,需跟踪最新进展

    分阶段学习:先掌握基础,再深入细分领域。 理论与实践结合:学完算法后立刻用代码实现。 保持持续学习:AI技术迭代快,需跟踪最新进展。

  • 电子硬件课程设计-Word文档

    电子硬件课程设计

  • 智慧农贸信息化管理平台.zip

    Java项目基于ssm框架的课程设计,包含LW+ppt

  • 脚本-压测相关-zyx编写

    脚本-压测相关-zyx编写

  • jspm机房预约系统lw+ppt.zip

    Java项目基于ssm框架的课程设计,包含LW+ppt

  • app.mobileconfig

    app.mobileconfig

  • 基于MotorCAD的2极12槽永磁直流有刷电机设计与优化教程

    内容概要:本文详细介绍了使用MotorCAD进行2极12槽永磁直流有刷电机的设计与优化方法。首先,通过Python脚本设置电机的基本参数,如外径、轴向长度、额定转速等。接着,深入探讨了磁钢选型、绕组设置、电磁仿真、热分析等多个关键技术环节。针对常见的设计难题,如齿槽转矩、磁钢充磁方向、绕组跨距等提供了具体的解决方案。同时,还分享了一些提高仿真精度和优化性能的实用技巧,如参数扫描、FEA计算、热管理等。最后,通过实测数据分析验证了设计方案的有效性。 适合人群:电机设计工程师、高校相关专业师生、对电机设计感兴趣的开发者。 使用场景及目标:适用于需要精确设计和优化小型永磁直流有刷电机的场合,帮助用户掌握MotorCAD的具体应用,提高设计效率和产品质量。 其他说明:文中提供的Python和VB脚本示例有助于自动化参数设置和批量处理任务,减少重复劳动。此外,还强调了在设计过程中需要注意的关键技术和常见陷阱,确保设计方案的可行性和可靠性。

  • 三相逆变器基于PI闭环与解耦控制的MATLAB仿真实现

    内容概要:本文详细介绍了三相逆变器在MATLAB/Simulink环境下的PI闭环控制及解耦控制的实现方法。首先,通过坐标变换将三相电流从静止坐标系转换到旋转坐标系,确保功率守恒并实时更新转子位置角。接着,实现了带有抗饱和处理的PI控制器,防止积分风-up现象。然后,针对d轴和q轴之间的耦合问题,引入了解耦控制,通过低通滤波和交叉耦合项来稳定系统。此外,还讨论了PWM生成模块的死区时间和仿真结果的验证方法,强调了参数调试的重要性和具体策略。 适合人群:电力电子工程师、自动化控制领域的研究人员以及对三相逆变器控制感兴趣的高校师生。 使用场景及目标:适用于需要深入了解三相逆变器控制原理和技术实现的研究项目或工程应用。主要目标是掌握PI控制器的设计、解耦控制的应用及其在MATLAB/Simulink中的仿真实现。 其他说明:文中提供了详细的代码示例和调试技巧,帮助读者更好地理解和实践相关理论。同时提醒读者,仿真成功并不代表实际硬件运行无误,建议在实验过程中准备必要的保护措施。

Global site tag (gtag.js) - Google Analytics