打印功能的 Spock 测试输出
Spock testing output from printing function
我只是想知道如何测试 groovy 函数的输出,该函数执行一些内容的 println。所以我写的傻class是:
class FriendlyGreeterLib {
def greet(name) {
println "${name.capitalize()}"
}
}
如果 greet()
返回一个字符串,则相应的测试将起作用。但是如何检查 println
到标准输出的输出...
import spock.lang.Shared
import spock.lang.Specification
class FriendlyGreeterLibTest extends Specification{
@Shared lib
def setupSpec() {
lib = new FriendlyGreeterLib()
}
def "FriendlyGreeterLib greets capitalized"() {
expect:
lib.greet(x) == y
where:
x | y
'fred' | 'Fred'
'FRED' | 'FRED'
'fRED' | 'FRED'
}
}
感谢 Royg,我想到了为 System.out 设置不同的流并读出流缓冲区。我不确定这是否绝对优雅,但它确实有效:
完成测试:
import spock.lang.Shared
import spock.lang.Specification
class FriendlyGreeterLibTest extends Specification{
@Shared lib
def setupSpec() {
lib = new FriendlyGreeterLib()
}
def "FriendlyGreeterLib greets capitalized"() {
when:
def buffer = new ByteArrayOutputStream()
System.out = new PrintStream(buffer)
and:
lib.greet(x)
then:
buffer.toString() == y
where:
x | y
'fred' | 'Fred'
'FRED' | 'FRED'
'fRED' | 'FRED'
}
}
我只是想知道如何测试 groovy 函数的输出,该函数执行一些内容的 println。所以我写的傻class是:
class FriendlyGreeterLib {
def greet(name) {
println "${name.capitalize()}"
}
}
如果 greet()
返回一个字符串,则相应的测试将起作用。但是如何检查 println
到标准输出的输出...
import spock.lang.Shared
import spock.lang.Specification
class FriendlyGreeterLibTest extends Specification{
@Shared lib
def setupSpec() {
lib = new FriendlyGreeterLib()
}
def "FriendlyGreeterLib greets capitalized"() {
expect:
lib.greet(x) == y
where:
x | y
'fred' | 'Fred'
'FRED' | 'FRED'
'fRED' | 'FRED'
}
}
感谢 Royg,我想到了为 System.out 设置不同的流并读出流缓冲区。我不确定这是否绝对优雅,但它确实有效:
完成测试:
import spock.lang.Shared
import spock.lang.Specification
class FriendlyGreeterLibTest extends Specification{
@Shared lib
def setupSpec() {
lib = new FriendlyGreeterLib()
}
def "FriendlyGreeterLib greets capitalized"() {
when:
def buffer = new ByteArrayOutputStream()
System.out = new PrintStream(buffer)
and:
lib.greet(x)
then:
buffer.toString() == y
where:
x | y
'fred' | 'Fred'
'FRED' | 'FRED'
'fRED' | 'FRED'
}
}