如何在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
相关产品推荐
相关产品推荐

