BDD(Behavior Driven Development)是一个比较新鲜的词汇,(大概是吧,更多听到的是TDD); 以前在学习scala的时候,用过scalatest,其中的testcase再也不是test,而更可能是specification, 描述测试用例用什么样的输入获得什么样的输出,比java test要readable的多。今天看到了cucumber这个开发框架,它能够用来(用更人性化的语言)描述测试用例,能够重复使用测试方法,提供不一样的参数, 不只眼前一亮。java
cucumber能够支持java,scala,ruby等多种语言。我只会java,因此就学习了一下它在java中应该怎么使用。它的java的例子比较简单,不能完整的跟着作,因此google了一把,找到一个可行的例子(参考连接);另外在github上面有它本身的几个例子,不用多讲,反而比较好用;git
我所讲的例子是从参考例子中copy来,稍做整理;程序员
项目结构;github
2. dependence librariesapi
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-java8</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-junit</artifactId> <version>1.2.2</version> <scope>test</scope> </dependency> </dependencies>
3. 定义feature文件ruby
这里定义了一个feature,用来测试Library,定义了两个场景(Scanario): a, 先向Library加入3本书,而后从中按照时间范围搜出符合条件的书;b, 从一个空的library中搜索书籍; 除了前面的关键字,其余部分都是很容易被理解的内容,即便不是程序员也很容易明白要测试什么;框架
Scenario由输入(Given)和输出(Then),以及执行的操做(When)组成,这些分别和对应的测试方法对应;Cucumber会从这些可读的文本中,抽取出须要的参数,做为对应方法的输入参数;jvm
4. 定义测试步骤Step:学习
这个测试步骤能够根据不一样的测试Scenario被重复使用;测试
5. 定义Junit驱动程序:
package cucumber.learn.book; import cucumber.api.CucumberOptions; import org.junit.runner.RunWith; import cucumber.api.junit.Cucumber; /** * Created by senyuanwang on 15/5/20. */ @RunWith(Cucumber.class) @CucumberOptions(plugin = {"pretty"}) public class BookSearchTest { }
6. 测试一把
简单的使用,我以为它最好用得地方就是能够有一个很是readable的feature文件,这个能够做为程序员和测试,和需求,甚至是和用户直接沟通的文档;另一个优势就是step java文件能够被重复利用,且不须要写不少的测试用例去提供不一样的输入参数;
参考:http://www.hascode.com/2014/12/bdd-testing-with-cucumber-java-and-junit/