You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Groovy Spock测试中调用Kotlin静态方法

问题解决步骤

1. 修正Kotlin类的两处问题

Kotlin的companion object方法默认不会生成Java兼容的静态方法,同时正则表达式的转义字符需要修正:

class DPCIValidator {

    companion object {
        // 添加@JvmStatic注解,让Groovy能通过类名直接调用
        @JvmStatic
        fun validate(value: String): Boolean {
            // Kotlin中字符串里的\d需要转义为\\d
            val regex = Regex(pattern = "\\d\\d\\d-\\d\\d-\\d\\d\\d\\d")
            return regex.matches(value)
        }
    }
}

2. 修正Spock测试的方法调用

测试代码里调用的方法名与Kotlin类中的方法名不匹配,需修正为正确的方法名:

import spock.lang.Specification

class DPCIValidatorSpec extends Specification{

    def 'test static method validate'(){
        when:
        Boolean test = DPCIValidator.validate("001-02-1234")

        then:
        test == true
    }
}

关键原因说明

  • Kotlin的companion object方法默认是该伴生对象的实例方法,而非类的静态方法,必须添加@JvmStatic注解,编译器才会生成Java兼容的静态方法,让Groovy(Spock基于Groovy)可以直接通过类名调用。
  • 测试代码中错误地将方法名写成了validateDPCI,与Kotlin类中定义的validate不匹配,这是直接的语法错误。
  • Kotlin字符串中的转义字符需要用双反斜杠,因此正则里的\d必须写成\\d,否则会被编译器识别为无效转义。

内容的提问来源于stack exchange,提问作者Madu Biradar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 15:02:14