spock是一款全能型的單元測試框架。
最近在做單元測試框架的調研和嘗試,目前確定的方案框架包括是:spock,Junit,Mockito以及powermock。由於本身使用Groovy的原因,比較鍾情於spock到家,但是奈何兼容性比較差,特別是跟Mockito等框架的高級語法的兼容。不過這不妨礙spock是一個非常優秀的單元測試框架,特別體現在用例的形式和測試報告的展示方式以及報錯信息的展示(這個我最中意)。
在簡單看過官方文檔之后做了一些簡單的Demo,分享給大家。(官方文檔貌似有段時間沒有更新了,如果用的話建議升級最新版)
package com.FunTester.spock.pratice
import org.slf4j.Logger
import spock.lang.Shared
import spock.lang.Specification
import static com.fun.frame.SourceCode.getLogger
class test01 extends Specification {
@Shared
int a = 10;
@Shared
Logger logger = getLogger(this.getClass().getName())
def setupSpec() {
logger.info "測試類開始! ${logger.getName()}"
}
def setup() {
logger.info "測試方法開始!"
}
def "這是一個測試"() {
given: "准備測試數據"
def s = 3
def ss = 3
expect: "驗證結果"
s == ss
}
def "表達式測試,表達式左右運算符號"() {
given: "准備數據"
expect: "測試方法"
z == x + y
where: "校驗結果"
x | y || z
1 | 0 || 1
2 | 1 || 3
}
def "表達式測試,表達式左右對象方法"() {
expect:
name.size() == length
where:
name | length
"Spock" | 5
"Kirk" | 4
"Scotty" | 6
"Sc3otty" | 7
}
def "表達式測試,表達式左右對象方法,數組表示測試數據"() {
expect:
name.size() == length
where:
name << ["fjdslj", "fds"]
length << [6, 3]
}
def "校驗對象"() {
given:
def per = new Per("fun", 12)
expect:
with(per) {
name == "fun"
age == 12
}
}
def "when then結構測試"() {
when:
def s = plus(3, 2)
def ss = plus(3, 2)
then:
verifyAll {
s == 3
ss == 3
}
}
/**
* 測試方法
* @param i
* @param j
* @return
*/
def plus(int i, int j) {
i
}
/**
* 測試類
*/
class Per {
Per(String name, int age) {
this.name = name
this.age = age
}
String name
int age
}
}
展示一下spock的測試報告:
- 有沒有驚喜!!!
技術類文章精選
- java一行代碼打印心形
- Linux性能監控軟件netdata中文漢化版
- 接口測試代碼覆蓋率(jacoco)方案分享
- 性能測試框架
- 如何在Linux命令行界面愉快進行性能測試
- 圖解HTTP腦圖
- 將swagger文檔自動變成測試代碼
- 五行代碼構建靜態博客
- 基於java的直線型接口測試框架初探
- JUnit中用於Selenium測試的中實踐
非技術文章精選
- 為什么選擇軟件測試作為職業道路?
- 寫給所有人的編程思維
- 成為優秀自動化測試工程師的7個步驟
- 手動測試存在的重要原因
- 成為自動化測試的7種技能
- 自動化和手動測試,保持平衡!
- 自動化測試生命周期
- 如何在DevOps引入自動化測試