cucumber 初探

BDD(Behavior Driven Development)是一个比较新鲜的词汇,(大概是吧,更多听到的是TDD); 之前在学习scala的时候,用过scalatest,其中的testcase不再是test,而更多是specification, 描述测试用例用什么样的输入得到什么样的输出,比java test要readable的多。今天看到了cucumber这个开发框架,它可以用来(用更人性化的语言)描述测试用例,可以重复使用测试方法,提供不同的参数, 不仅眼前一亮。

cucumber可以支持java,scala,ruby等多种语言。我只会java,所以就学习了一下它在java中应该怎么使用。它的java的例子比较简单,不能完整的跟着做,所以google了一把,找到一个可行的例子(参考链接);另外在github上面有它自己的几个例子,不用多讲,反而比较好用;

我所讲的例子是从参考例子中copy来,稍作整理;

  1. 项目结构;

cucumber 初探_第1张图片

2. dependence libraries

<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文件

cucumber 初探_第2张图片

这里定义了一个feature,用来测试Library,定义了两个场景(Scanario): a, 先向Library加入3本书,然后从中按照时间范围搜出符合条件的书;b, 从一个空的library中搜索书籍; 除了前面的关键字,其他部分都是很容易被理解的内容,即使不是程序员也很容易明白要测试什么;

Scenario由输入(Given)和输出(Then),以及执行的操作(When)组成,这些分别和对应的测试方法对应;Cucumber会从这些可读的文本中,抽取出需要的参数,作为对应方法的输入参数;

4. 定义测试步骤Step:

cucumber 初探_第3张图片

这个测试步骤可以根据不同的测试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. 测试一把

cucumber 初探_第4张图片

简单的使用,我觉得它最好用得地方就是可以有一个非常readable的feature文件,这个可以作为程序员和测试,和需求,甚至是和用户直接沟通的文档;另外一个优点就是step java文件可以被重复利用,且不需要写很多的测试用例去提供不同的输入参数;


主页:https://cucumber.io/ 

参考:http://www.hascode.com/2014/12/bdd-testing-with-cucumber-java-and-junit/

git:  https://github.com/cucumber/cucumber-jvm




你可能感兴趣的:(cucumber,bdd)