gpt4 book ai didi

grails - 不计算 Spock 集成测试交互

转载 作者:行者123 更新时间:2023-11-28 21:12:07 30 4
gpt4 key购买 nike

我想为我的 Grails 用户类编写集成测试。

我有一个 afterUpdate() 方法,它调用 userService 中的 afterUpdate 方法,而 userService 又调用另一个服务。

现在我想验证对其他服务的调用是否正确完成。如果我调试代码,则会正确调用该方法。但我的测试总是失败,并说该方法未被调用:

    def "After Update for User"() {
given:
RedisService.metaClass.'static'.del = {String key -> true}
User user = new User()
user.save(flush: true)

when:
user.afterUpdate()

then:
1 * redisService.del(!null)
}

我尝试过不同的事情,比如

then:
1 * user.userService.afterUpdate(!null)
1 * userService.redisService.del(!null)
1 * redisService.del(!null)

但他们都失败了。

我总能得到:

| Failure:  After Update for User(com.boxcryptor.server.RedisCacheIntegrationSpec)
| Too few invocations for:

1 * user.userService.afterUpdate(!null) (0 invocations)

Unmatched invocations (ordered by similarity):

None

Too few invocations for:

1 * redisService.del(!null) (0 invocations)

Unmatched invocations (ordered by similarity):

None

更新:

之后的更新方法非常简单:

def afterUpdate(User user) {
deleteETagCache(user)
}

def deleteETagCache(User user) {
redisService.del(user.id.toString())
}

最佳答案

我认为您将重写方法与 metaClass 魔法混淆了,并且混淆了类或对象。我会尝试:

def "After Update for User"() {
given:
def redisService = Mock(RedisService)
and:
User user = new User()
user.save(flush: true)
and:
user.redisService = redisService

when:
user.afterUpdate()

then:
1 * redisService.del(user.id.toString())
}

另外,我会创建一个单元测试,而不是一个集成测试。

关于grails - 不计算 Spock 集成测试交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21042127/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com