我正在尝试使用 Groovy 中的 Spock 测试具有 Arrow-kt 类型的 Kotlin 代码。但是,我无法使用 Arrow-kt 的附加功能,例如Some
. 例如,我有一个测试如下:
@Unroll
def "add returns #expected for queryRecord #queryRecord"() {
given:
def ip = "ip"
def rule = "rule"
when:
def result = unit.add(ip, rule)
then:
1 * dynamoDBMapperMock.load(ActionRecord.class, ip) >> queryRecord
result == expected
where:
queryRecord | expected
new ActionRecord() | None.INSTANCE
null | Some(new ActionInternal("ip"))
}
虽然第一个数据行成功没有问题,但第二个数据行失败并出现以下错误:
groovy.lang.MissingMethodException: No signature of method: package.name.EventSpec.Some() is applicable for argument types: (package.name.ActionInternal) values: [ActionInternal(dropletIp=null)]
Possible solutions: Mock(), Spy(), Stub(), dump(), Mock(groovy.lang.Closure), Mock(java.lang.Class)
我也试过.some()
了,但没有用。显然,Groovy 无法访问 Kotlin 扩展,而Some
只是一个数据类[ 1 ],所以我不确定为什么我不能在 Groovy 中使用它。