spock是一款全能型的单元测试框架。
最近在做单元测试框架的调研和尝试,目前确定的方案框架包括是:spock,Junit,Mockito以及powermock。由于本身使用Groovy的原因,比较钟情于spock框架,但是奈何兼容性比较差,特别是跟Mockito等框架的高级语法的兼容。不过这不妨碍spock是一个非常优秀的单元测试框架,特别体现在用例的形式和测试报告的展示方式以及报错信息的展示(这个我最中意)。
在简单看过官方文档之后做了一些简单的Demo,分享给大家。(官方文档貌似有段时间没有更新了,如果用的话建议升级最新版)
package com.FunTester.spock.praticeimport org.slf4j.Loggerimport spock.lang.Sharedimport spock.lang.Specificationimport static com.fun.frame.SourceCode.getLoggerclass test01 extends Specification {@Sharedint a = 10;@SharedLogger logger = getLogger(this.getClass().getName())def setupSpec() {logger.info "测试类开始! ${logger.getName()}"}def setup() {logger.info "测试方法开始!"}def "这是一个测试"() {given: "准备测试数据"def s = 3def ss = 3expect: "验证结果"s == ss}def "表达式测试,表达式左右运算符号"() {given: "准备数据"expect: "测试方法"z == x + ywhere: "校验结果"x | y || z1 | 0 || 12 | 1 || 3}def "表达式测试,表达式左右对象方法"() {expect:name.size() == lengthwhere:name | length"Spock" | 5"Kirk" | 4"Scotty" | 6"Sc3otty" | 7}def "表达式测试,表达式左右对象方法,数组表示测试数据"() {expect:name.size() == lengthwhere: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 == 3ss == 3}}/*** 测试方法* @param i* @param j* @return*/def plus(int i, int j) {i}/*** 测试类*/class Per {Per(String name, int age) {this.name = namethis.age = age}String nameint age}}
展示一下spock的测试报告:


原文作者:FunTester;如有侵权,请联系管理员删除。