Spocklight: Grouping Assertions
In a Spock specification we write our assertion in the then:
or expect:
blocks. If we need to write multiple assertions for an object we can group those with the with
method. We specify the object we want write assertions for as argument followed by a closure with the real assertions. We don't need to use the assert
keyword inside the closure, just as we don't have to use the assert
keyword in an expect:
or then:
block.
In the following example specification we have a very simple implementation for finding an User
object. We want to check that the properties username
and name
have the correct value.
@Grab("org.spockframework:spock-core:1.0-groovy-2.4")
import spock.lang.Specification
import spock.lang.Subject
class UserServiceSpec extends Specification {
@Subject
private UserService userService = new DefaultUserService()
def "check user properties"() {
when:
final User user = userService.findUser("mrhaki")
then:
// Assert each property.
user.username == "mrhaki"
user.name == "Hubert A. Klein Ikkink"
}
def "check user properties using with()"() {
when:
final User user = userService.findUser("mrhaki")
then:
// Assert using with().
with(user) {
username == "mrhaki"
name == "Hubert A. Klein Ikkink"
}
}
def "check expected user properties using with()"() {
expect:
with(userService.findUser("mrhaki")) {
username == "mrhaki"
name == "Hubert A. Klein Ikkink"
}
}
}
interface UserService {
User findUser(final String username)
}
class DefaultUserService implements UserService {
User findUser(final String username) {
new User(username: "mrhaki", name: "Hubert A. Klein Ikkink")
}
}
class User {
String username
String name
}
Written with Spock 1.0.