Spock supports JUnit rules out of the box. We simply add a rule with the @Rule
annotation to our Spock specification and the rule can be used just like in a JUnit test. The Spring Boot project contains a JUnit rule OutputCapture
to capture the output of System.out
and System.err
.
In the following example specification we apply the OutputCapture
rule and use it in two feature methods:
package com.mrhaki.spock @Grab('org.spockframework:spock-core:0.7-groovy-2.0') import spock.lang.* @Grab('org.springframework.boot:spring-boot:1.2.1.RELEASE') import org.springframework.boot.test.OutputCapture class CaptureOutputSpec extends Specification { @org.junit.Rule OutputCapture capture = new OutputCapture() def "capture output print method"() { when: print 'Groovy rocks' then: capture.toString() == 'Groovy rocks' } def "banner text must contain given messagen and fixed header"() { given: final Banner banner = new Banner(message: 'Spock is gr8!') when: banner.print() then: final List lines = capture.toString().tokenize(System.properties['line.separator']) lines.first() == '*** Message ***' lines.last() == ' Spock is gr8! ' } } /** * Class under test. The print method * uses println statements to display * some message on the console. */ class Banner { String message void print() { println ' Message '.center(15, '*') println message.center(15) } }
Written with Spock-0.7-groovy-2.0.