Spock - 如何輕鬆體面地進行Java單元測試

測試驅動開發

TDD

在寫新代碼前寫一個失敗的測試用例
消除重複

主要工具

  1. JUnit
  2. Spock
  3. Geb

信條

沒有測試的功能=沒有的功能
有測試=可重構
有測試> 有文檔

JUnit 的打開方式

CL: java -cp junit.jar junit.textui.TestRunner className.methodName
Ant, Maven, Gradle, IDE
Keep the bar green to keep the code clean

JUnit 信條

Tests are the Programmer’s Stone, transmuting fear into boredom.

效率工具之Mock

Cagetory, TestSuit, TestRunner

JUnit 最佳實踐

保持代碼的可測試性:html

  • new vs @Autowired
    new 許多狀況下更方便測試, 爲方便new,可借鑑Builder工廠化方法模式
    @Autowired 須要
@WebAppConfiguration
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {"classpath*:/spring-test.xml"
    })
    ...
  • protected vs private
    package可見性更方便測試, private不便於測試
  • 不要滑入爲測試寫測試的深淵

    Keep simplejava

  • if(if(if(if)))) 這樣的類無法測試

解耦方法:git

  • 拆分紅多個方法解耦;
  • 經過面向對象的繼承多態解耦.

JUnit 便於拆除的腳手架

目錄結構,分離test與src
測試代碼與正式代碼分開放到不一樣文件目錄

src/main/java
src/test/java

但每一個類的測試類與被測試類採用一樣的包名

src/main/java/com/example/MyBeauty.java
src/test/java/com/example/MyBeautyTest.java

依賴分離 
maven dependency依賴增長 <scope>test</scope>
gradle 依賴增長 testCompile 後綴

方法命名以test開頭,兼容JUnit3,4,5
AclassTest.testMethod()

JUnit 集成測試

依賴容器的測試:Jetty的配置
集成測試:mvn integration-test
Selenium相應配置,瀏覽器插件

JUnit 測試專屬配置

配置文件spring-test.xml,pom_test.xml 
經過 註解和mvn -f 參數分別指定 

Spring MVC測試:mockMvc (略)
Spring security 權限處理:(略)

Spock 參考資料

BDD vs TDD
http://farenda.com Java programming tutorials with many code examples!
https://github.com/spockframework
smarter-testing-with-spock.pdf
spock-next-generation.pdf

Spock 生態圈

基於Groovy
Groovy Grape Geb Gradle ...
測試類須要繼承自 Specification(說明書)
class MyBeautyControllerSpec extends Specification {
標記關鍵詞

Spec: when then expect given where

k2fnQ.png

bdd-behavior-driven-development-webapps-mit-groovy-spock-und-geb-14-638.jpg?cb=1400130045

Geb - web測試

擴展:GebSpec //基於selenium
動做: go, isAt, doAt
內置對象:pageUrl,_browser,page,$
參見:adminssll/test/script/LoginSpec

Geb - 象jQuery同樣

go "https://bixuebihui.com/"
    
    println pageUrl
    
    assert $("div.title h3").text() == "認證"
    
    $("form").with {
    
    username = "user1"
    
    password = "123"
    
    $('input', name:'submit').click()
    
    }
    
    go '/blog/'

追求

速度,覆蓋率,可重複github

測試報告指標

對於Gradle項目
會在項目目錄下生成報測試報告 build/reports/tests/test/index.htmlweb

圖片描述

對於maven項目,測試報告生成: mvn sitespring

以上內容基於2017-7-13鄰里中國技術部的培訓資料瀏覽器

相關文章
相關標籤/搜索