阅读更多

4顶
0踩

编程语言

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

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

  • 基于智能温度监测系统设计.doc

    基于智能温度监测系统设计.doc

  • 搜广推推荐系统中传统推荐系统方法思维导图整理-完整版

    包括userCF,itemCF,MF,LR,POLY2,FM,FFM,GBDT+LR,阿里LS-PLM 基于深度学习推荐系统(王喆)

  • 2023-04-06-项目笔记 - 第三百五十五阶段 - 4.4.2.353全局变量的作用域-353 -2025.12.22

    2023-04-06-项目笔记-第三百五十五阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.353局变量的作用域_353- 2024-12-22

  • 和美乡村城乡融合发展数字化解决方案.docx

    和美乡村城乡融合发展数字化解决方案.docx

  • CNN基于Python的深度学习图像识别系统

    基于Python的深度学习图像识别系统是一个利用卷积神经网络(CNN)对图像进行分类的先进项目。该项目使用Python的深度学习库,如TensorFlow,构建和训练一个模型,能够自动识别和分类图像中的对象。系统特别适合于图像处理领域的研究和实践,如计算机视觉、自动驾驶、医疗影像分析等。 项目的核心功能包括数据预处理、模型构建、训练、评估和预测。用户可以上传自己的图像或使用预定义的数据集进行训练。系统提供了一个直观的界面,允许用户监控训练进度,并可视化模型的性能。此外,系统还包括了一个模型优化模块,通过调整超参数和网络结构来提高识别准确率。 技术层面上,该项目使用了Python编程语言,并集成了多个流行的机器学习库,如NumPy、Pandas、Matplotlib等,用于数据处理和可视化。模型训练过程中,系统会保存训练好的权重,以便后续进行模型评估和预测。用户可以通过简单的API调用,将新的图像输入到训练好的模型中,获取预测结果。

  • 拳皇97.exe拳皇972.exe拳皇973.exe

    拳皇97.exe拳皇972.exe拳皇973.exe

  • 基于python和协同过滤算法的电影推荐系统

    基于python和协同过滤算法的电影推荐系统 基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法的电影推荐系统基于python和协同过滤算法

  • DEV-CPP-RED-PANDA

    DEV-CPP-RED-PANDA

  • Python语言求解旅行商(TSP)问题,算法包括禁忌搜索、蚁群算法、模拟退火算法等

    Python语言求解旅行商问题,算法包括禁忌搜索、蚁群算法、模拟退火算法等。

  • pdfjs2.5.207和4.9.155

    pdfjs 用于在浏览器中查看/预览/打印pdf。 pdfjs 2.5.207 支持firefox/chrome/edge/ie11以上版本。 如果需要支持旧版本浏览器,可以使用这个,是未修改过的原版,支持打印和下载按钮。亲测有效。 pdf 4.9.155分两个包: pdfjs-4.9.155-dist.zip pdfjs-4.9.155-legacy-dist.zip

  • 建设项目现场高温人员中暑事故应急预案.docx

    建设项目现场高温人员中暑事故应急预案

  • 数据结构上机实验大作业-线性表选题.zip

    数据结构上机实验大作业-线性表选题.zip

Global site tag (gtag.js) - Google Analytics