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/