Cucumber是一个支持BDD(Behavior Driven Development),即行为驱动开发的自动化测试框架。在进行单元测试或者集成测试之前,事先将测试的步骤和验证信息用通用的语言(英语)定义好,使得测试的步骤、单元测试和集成测试每一步执行的目的能被非开发人员读懂,并且写单元测试和集成测试的人员可以依据事先写好的框架进行代码的编写,达到行为驱动开发的目的。
2. 新建Java工程,将Cucumber所需要的jar包导入Java工程中(最好新建一个文件夹,将jar包放到该文件夹下)。
3.通过Build Path添加刚导入的JARs
4. 新建用来定义步骤的feature格式的文件,新建的feature格式文件会自动填写模板文件,具体使用方法后续说明。同上,最好将其放在特定的文件夹里,本例为Feature文件夹。
5. 将被测试的包导入Java工程中,本例测试一个简单的Calculator类。
6. 新建一个包,包名必须为test.java或main.java否则后续创建Cucumber定义步骤时会出错。
7. 在test.java包中新建一个Step-Definition class。
定义了测试的步骤,包括以下几个关键字
BUT home page should not be missing
Cucumber的Step-definition和其他的java格式文件基本相同,但是在创建时可以根据需要选择性勾选并自动添加Give、When、Then、And、But注释。
完成后会自动生成一个java模板文件,包括了之前勾选的注释,本例勾选了Given、When、Then和And。注释的格式为:
@关键字("^******$")
@Given("^you are in Given annotation$")
关键字后括号里的内容必须和先前定义的.feature文件的关键字的内容一一对应,识别大小写并且包括空格数目等都要一样,以^开头,$结尾。注释之后为具体实现的方法,在方法中添加符合关键字后描述的操作的代码。
Cucumber的测试执行文件一般为一个空的Junit Test Case,即不需要Test注释,更不需要Before和After等注释。当必须添加RunWith注释和CucumberOptions注释。
RunWith注释每一个Cucumber框架的测试文件都是相同的,为RunWith(Cucumber.class)。CucumberOption注释的内容是根据实际情况需要手动更改的。
CucumberOptions注释选项一般有features、glue、monochrome和dryrun等。其中。features和glue是必写项,monochrome和dryrun选填项。
features定义了.feature文件的相对路径,格式为features=“.feature文件在该工程的文件夹/.feature文件的名字”。eg. features="Feature/calculatorAdd.feature"
glue定义了Step-difinition的包名,格式为glue=”完整的包名”。eg. test.java.cucumberDefinition。
monochrome选项有两个值,分别为true和false,默认为false,格式为monochrome=boolean。用来控制测试结果的可读性,当monochrome=true时,测试结果可读性更好。monochrome=true时,测试结果可读性比较差。
dryrun选项暂时不了解。
通过以上介绍,Cucumber框架基本搭建完成,对Cucumber各文件的作用也有所了解,接下来就是通过对框架的修改来实现一个简单的BDD模式的单元测试。
1. 新建testAdd.feature文件,并修改其内容
@tag
Feature: Test add function of calculator
@tag1
Scenario: Add two numbers
Given init the object of calculator
When clear the result to zero
And add num1 and num2
Then check the actual result
package test.java.cucumberDefinition;
import cucumber.api.java.en.Given;
import cucumber.api.java.en.When;
import cucumber.api.java.en.Then;
import static org.junit.Assert.assertEquals;
import com.calculator.Calculator;
import cucumber.api.java.en.And;
public class stepDefinition {
Calculator cal;
int result;
@Given("^init the object of calculator$")
public void given() throws Throwable {
cal= new Calculator();
}
@When("^clear the result to zero$")
public void when() throws Throwable {
cal.clear();
}
@Then("^add num1 and num2$")
public void then() throws Throwable {
cal.add(2);
cal.add(3);
}
@And("^check the actual result$")
public void and() throws Throwable {
int expected = 5;
result = cal.getResult();
assertEquals(expected,result);
}
}
3. 新建一个Junit Test Case,并将其内容清空,最后添加RunWith和CucumberOptions注释。
package com.calculator.test;
import static org.junit.Assert.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(features="Feature/calculatorAdd.feature",glue="test.java.cucumberDefinition",monochrome=true)
public class testAdd {
}
4. 右键testAdd.java,执行run as junit case进行测试。
Cucumber框架进阶篇:https://blog.csdn.net/Cupupup/article/details/80154544