首页 > 解决方案 > Spock 中的 Num*Obj 是什么意思

问题描述

比方说deleteInvocation=1, notDeletedInvocation=2

这是否意味着在进入之前我将在 Post 数组中有 3 条记录?

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
}

标签: spock

解决方案


首先,我建议不要使用以大写字母开头的变量名,特别是如果这些变量与实际的类名相同(!)。例如,我会改变

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

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

并更新所有使用这些变量的地方。


至于您的问题,integerNumber * methodCall(...)模拟或间谍对象上的符号意味着您要验证在测试期间methodCall(...)准确调用的integerNumber时间(交互检查)。

请参阅Spock 手册中的“交互”一章了解更多信息。

该符号integerNumber * methodCall(...) >> stubResult意味着您将交互与存根结合起来,即使用模拟或间谍对象一次指定两个事物。

有关详细信息,请参阅Spock 手册章节“组合模拟和存根”


推荐阅读