gpt4 book ai didi

java - 无法在 Spock 中断言值

转载 作者:行者123 更新时间:2023-12-02 01:37:42 27 4
gpt4 key购买 nike

我有一个代码可以测试存储库中保存的列表是否在服务中更新。状态需要从 READY 更新为 DELETED但似乎 status 返回 null 而不是 ListStatus

有人可以帮忙吗?

    given:
Long teamId = 1L
Long listId = 1L


List() currentList = Mock()
currentList.status = ListStatus.READY

listRepository.findByIdAndTeamIdAndStatusIn(listId, teamId, ListStatus.getUserVisibleStatuses()) >> Optional.of(currentList)
service.fetchValidListtByIdAndTeamId(listId, teamId) >> Optional.of(currentList)

when:
service.deleteList(teamId, listId)

then:
1 * listRepository.save(currentList) >> { updatedList ->
assert updatedList.status == status.DELETED
}

最佳答案

这段代码充满了错误,我的回复可能会做出与您的用例不匹配的假设。不过我会尝试的。

首先,这一行无法编译:

List() currentList = Mock()

您正在声明一个变量,简单地说,应该由以下方式完成:

类型规范 标识符 = 初始化程序

List() 不能是类型规范,它是对方法 List() 的某种方法调用,该方法应该在您的测试范围内。

如果我们假设你的意思是

List currentList = Mock()

java.lang 中的 List 类型没有 status 属性。我将假设 List 类型是您自己的类型。

这只是我个人的想法,但我发现这样写起来更具可读性

def currentList=Mock(List)

但两者都可以。

下一行是你遇到麻烦的地方。currentList 不是 List 实现。它没有状态成员变量。它是一个尊重 List 接口(interface)的模拟。它有一个 setStatus() 和一个 getStatus() 方法。但是调用 setStatus(ListStatus.READY) 不会设置模拟的内部状态。它没有内部状态,或者至少没有List的内部状态。

看起来您想要的是创建一个 List 类型的 stub ,当 getStatus() 为时,它将返回 ListStatus.READY叫。您可以通过以下方式执行此操作:

def currentList=Stub(List) {
getStatus() >> ListStatus.READY
}

有很多缺失的样板代码可供我运行您的示例并检查进一步可能的错误,因此我希望此更正能让您朝着正确的方向前进。

关于java - 无法在 Spock 中断言值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57509031/

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