很多工程师都了解测试驱动开发(Test Driven Development,TDD),但是了解行为驱动开发的人却不是很多。
行为驱动开发(Behavior Driven Development,BDD),是测试驱动开发的延伸,旨在使用简单的,特定于领域的脚本语言(软件外包行业的最大问题?从领域驱动设计说起),通过结构化的方法,将自然语言文本转换为可执行的测试用例。从而在技术与实际的业务需求者之间,建立起一条易于理解的道路。这样,不理解程序员们正在做什么的业务方,就可以更容易的理解他们的工作。
在行为驱动开发中,最关注的核心是业务的设计。而测试驱动开发,则更关心是的使用代码来描述测试用例。因此,在行为驱动开发相关的框架中,采用了多种技术手段,构造自然语言与代码之间的连接关系,使得关注于业务逻辑的使用者,能够使用更容易理解的语言,向测试代码下达他们的指令。
下面我们通过当前最为流行的BDD 框架JBehave来介绍一下BDD对于这种设计的实现。
在JBehave中,完全一个测试用例需要5个步骤。
一、编写测试用例
在JBehave中,一个测试用例由一系列场景(Scenario)组成。而一个场景的编写,需要符合JBehave定义的语法格式。主要格式内容如下:
在语法格式中,规定了一个测试用例的写法,以及其中特定的关键字,而这种写法力图贴近于自然语言,并且能够被框架所解析。
二、将测试用例映射到Java
编写好测试用例之后,JBehave会将测试用例映射成Java。这种映射主要通过RegexStoryParser(正则表达式)或者是GherkinStoryParser这两种解析器来实现。
通过类似于
@Given("a stock of symbol $symbol and a threshold of $threshold")
public void stock(String symbol, double threshold) {
stock = new Stock(symbol, threshold);
}
的方式,可以将测试用例中的输入映射进Java函数的输入参数中,尽管保持入参的名字和@Given语句中的参数名字一致是一种好的习惯,但是JBehave是按照参数的顺序来赋值的,并不要求名称完全一致。
三、配置测试用例
JBehave的核心是配置的嵌入类,这是提供给IDE的可执行入口,通过执行该嵌入类,系统可以调用框架的相关方法,从而能够完成JBehave提供的相关功能。
JBehave提供的可嵌入类主要有ConfigurableEmbedder和InjectableEmbedder两种。
四、运行测试用例
配置好嵌入类之后,就可以通过JUnit在IDE或者是命令行中运行测试用例了。
五、查看报告
测试用例执行完毕之后会给出测试报告,JBehave提供了多种测试报告可供使用,包括控制台、文本文件、XML文件、HTML页面等。