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.