Search code examples
spock

what does Num*Obj means in Spock


Let's say deleteInvocation=1, notDeletedInvocation=2

Does that mean I will have 3 records in the Post array before entering?

3 * postConverter.apply(Post, null) >> PostPayload

@Unroll
def "Verify PostCoreImpl.findById return  Post when includeRemoved: [#includeRemoved]"() {
    setup:
    def PostId = UUID.randomUUID()
    def Post = Mock(Post)
    def PostPayload = Mock(PostPayload)

    when:
    def actual = underTest.findPostById(PostId, includeRemoved, false, false)

    then:
    deleteInvocation * mockPostDataManager.findByIdincludeRemoved(PostId) >> Post
    notDeletedInvocation * mockPostDataManager.findById(PostId) >> Post
    3 * postConverter.apply(Post, null) >> PostPayload
    actual == PostPayload

    where:
    deleteInvocation | notDeletedInvocation | includeRemoved
    1                | 0                    | true
    0                | 1                    | false
}

Solution

  • First of all, I would advise against using variable names starting with capital letters, especially if these variables are identical with actual class names(!). For example, I would change

    def PostId = UUID.randomUUID()
    def Post = Mock(Post)
    def PostPayload = Mock(PostPayload)
    

    to

    def postId = UUID.randomUUID()
    def post = Mock(Post)
    def postPayload = Mock(PostPayload)
    

    and update all places where these variables are used.


    As for your question, the notation integerNumber * methodCall(...) on a mock or spy object means that you want to verify that methodCall(...) was called exactly integerNumber times during your test (interaction checking).

    Please consult the Spock manual chapter "Interactions" for further information.

    The notation integerNumber * methodCall(...) >> stubResult means that you combine interactions with stubbing, i.e. specify two things at once with a mock or spy object.

    Please consult the Spock manual chapter "Combining Mocking and Stubbing" for further information.