测试报告
https://github.com/renatoathaydes/spock-reports
类Gradle风格的测试报告
https://github.com/tprado/damage-control-report
参数化数据生成器
https://github.com/Bijnagte/spock-genesis
@Unroll
def 'test reverse #string'() {
when:
def reversed = string.reverse()
then:
reversed.size() == string.size()
if (string) {
string.eachWithIndex { letter, i ->
letter == reversed[-(i + 1)]
}
}
reversed.reverse() == string
where:
string << Gen.these('', 'foo').then(Gen.string).take(10000)
}
Gen.type(Person,
id: Gen.integer(200..10000),
name: Gen.string(~/[A-Z][a-z]+( [A-Z][a-z]+)?/),
birthDate: Gen.date(Date.parse('MM/dd/yyyy','01/01/1940'), new Date()),
title: Gen.these('', null).then(Gen.any('Dr.', 'Mr.', 'Ms.', 'Mrs.')),
gender: Gen.character('MFTU'))
Arquillian测试套件
https://github.com/arquillian/arquillian-testrunner-spock
<dependency>
<groupId>org.jboss.arquillian.spock</groupId>
<!-- replace * with standalone or container, according to your needs -->
<artifactId>arquillian-spock-*</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<!-- External Projects -->
<dependency>
<groupId>org.spockframework</groupId>
<artifactId>spock-core</artifactId>
<version>${version.spock}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>${version.groovy}</version>
<scope>test</scope>
</dependency>
@Deployment
def static JavaArchive "create deployment"() {
return ShrinkWrap.create(JavaArchive.class)
.addClasses(AccountService.class, Account.class, SecureAccountService.class)
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
}
@Inject
AccountService service
def "transferring between accounts should result in account withdrawal and deposit"() {
when:
service.transfer(from, to, amount)
then:
from.balance == fromBalance
to.balance == toBalance
where:
from << [new Account(100), new Account(10)]
to << [new Account(50), new Account(90)]
amount << [50, 10]
fromBalance << [50, 0]
toBalance << [100, 100]
}
PowerMock模拟静态类/方法
https://github.com/powermock/powermock
InjectMocks依赖注入
https://github.com/marcingrzejszczak/spock-subjects-collaborators-extension
Maven
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>bintray</name>
<url>http://jcenter.bintray.com</url>
</repository>
</repositories>
<dependency>
<groupId>com.blogspot.toomuchcoding</groupId>
<artifactId>spock-subjects-collaborators-extension</artifactId>
<version>1.2.2</version>
<scope>test</scope>
</dependency>
Gradle
repositories {
mavenCentral()
jcenter()
}
dependencies {
testCompile 'com.blogspot.toomuchcoding:spock-subjects-collaborators-extension:1.2.2'
}
package com.blogspot.toomuchcoding.spock.subjcollabs
import spock.lang.Specification
import com.blogspot.toomuchcoding.spock.subjcollabs.Collaborator
import com.blogspot.toomuchcoding.spock.subjcollabs.Subject
class ConstructorInjectionSpec extends Specification {
public static final String TEST_METHOD_1 = "Test method 1"
SomeOtherClass someOtherClassNotToBeInjected = Mock()
@Collaborator
SomeOtherClass someOtherClass = Mock()
@Subject
SomeClass systemUnderTest
def "should inject collaborator into subject"() {
given:
someOtherClass.someMethod() >> TEST_METHOD_1
when:
String firstResult = systemUnderTest.someOtherClass.someMethod()
then:
firstResult == TEST_METHOD_1
systemUnderTest.someOtherClass == someOtherClass
}
class SomeClass {
SomeOtherClass someOtherClass
SomeClass(SomeOtherClass someOtherClass) {
this.someOtherClass = someOtherClass
}
}
class SomeOtherClass {
String someMethod() {
"Some other class"
}
}
}
Retry重试扩展
https://github.com/anotherchrisberry/spock-retry
class ExampleSpec extends Specification {
@RetryOnFailure
void 'does something'() {
// will try to run twice before failing
}
}
dbUnit数据库单元测试
https://github.com/janbols/spock-dbunit
class MyDbUnitTest extends Specification{
DataSource dataSource
@DbUnit
def content = {
User(id: 1, name: 'jackdaniels', createdOn: '[NOW]')
}
}
安卓扩展
https://github.com/AndrewReitz/android-spock
Gherkin支持
https://github.com/cucumber/common
http://pease.github.io/
Serenity支持
https://github.com/serenity-bdd
Allure支持
http://allure.qatools.ru/
https://github.com/allure-framework/allure-spock