我在Spock测试中使用内部kotlin函数时遇到了麻烦。以下是我的spock测试的简短片段:
private def preconditions = new MonetaryPreconditions()
private def usdMonetary = new Monetary(BigDecimal.ZERO, Currency.USD)
def "should throw nothing because Monetaries currencies are same"(){
when:
preconditions.checkMonetariesCurrencies(usdMonetary , usdMonetary )
then:
noExceptionThrown()
}
internal object MonetaryPreconditions {
internal fun checkMonetariesCurrencies(monetary1: Monetary, monetary2: Monetary) {
if (monetary1.currency != monetary2.currency) {
throw CurrencyMismatchException(arrayOf(monetary1.currency, monetary2.currency), "Compared currencies does not match: " + monetary1.currency
+ " , " + monetary2.currency)
}
}
}
我的测试以StackTrace失败:
groovy.lang.missingmethodException:方法:touk.recruitment.parkandrest.parkingmanagement.core.monetary.monetarypreconditions.checkmonetariesCencurrences()的无签名适用于参数类型:(touk.recruitment.parkandrest.parkandrest.parkingmanagement.core.monetariesCencurrency,
问题在于CheckMonetariesCencurrences函数的内部可见性。如果我把它改成公共的,它工作得很好,但是我希望它是模块私有的。我怎么能用斯波克做到这一点?
有关我的项目的其他信息:
我刚刚遇到了同样的问题,我使用的解决方案(由我的一位经验丰富的同事建议)是在Kotlin中编写一个包装器类(与测试中的类(CUT)在同一个包中;我将源代码文件放在test/Kotlin
文件夹中),然后将函数调用转发到CUT。然后我在groovy单元测试代码中使用了包装器类。
此外,从另一种编程语言调用Kotlin中的对象
中定义的函数需要访问对象的实例
变量,例如。
MonetaryPreconditions.INSTANCE.myfunction
在您的情况下,包装器可能如下所示:
package com.yourpackage
object MonetaryPreconditionsWrapper{
fun checkMonetariesCurrencies(monetary1: Monetary, monetary2: Monetary){
MonetaryPreconditions.checkMonetariesCurrencies(monetary1, monetary2)
}
}
现在,您可以测试MonetaryPreconditions.CheckMonetariesCencurrences
函数,方法是从groovy代码中调用包装器函数,如下所示:
MonetaryPreconditionsWrapper.INSTANCE.checkMonetariesCurrencies(monetary1, monetary2)
例外情况。kt: 在科特林: 它在kotlin中工作,函数是内联的。 但是当在Java代码中使用时,它就是不能内联,仍然是一个正常的静态方法调用(从反编译的内容中可以看出)。 像这样的东西:
本文向大家介绍Kotlin中内置函数的用法和区别总结,包括了Kotlin中内置函数的用法和区别总结的使用技巧和注意事项,需要的朋友参考一下 前言 在Kotlin中的源码标准库(Standard.kt)中提供了一些Kotlin扩展的内置函数可以优化kotlin的编码。Standard.kt是Kotlin库的一部分,它定义了一些基本函数。 这个源代码文件虽然一共不到50行代码,但是这些函数功能都非常强
本文向大家介绍kotlin Standard中的内联函数示例详解,包括了kotlin Standard中的内联函数示例详解的使用技巧和注意事项,需要的朋友参考一下 let、with、run、apply、also、takeIf、takeUnless、repeat函数的使用 kotlin Standard.kt文件中,提供了一些内联函数,这些内联函数可以减少代码量,在使代码优美的同时,打打提高开发效率
我试图理解正确使用的功能(运行,与,让,也,应用)。假设我们有以下初始代码(我将其用于测试目的): 根据这张图片,我将其修改为: 但根据我找到的一些指南,我认为我在那里做了多项“工作” 修改初始con对象 所以,我觉得这更正确: 这些职能是否严格分开 是否有关于如何使用这些功能的指南(官方或非官方)?
我在理解GEB/Spock测试中的一个问题时遇到了一些困难。我们正在使用gradle,并试图并行运行我们的测试。据我所知,gradle中的maxParallelForks属性将在单独的JVM中运行测试类。 我遇到的问题是,当我有6个测试类并将maxParallelForks设置为4个时,当测试开始时,我将得到4个测试类并行运行。太棒了!但最后两个班才是问题所在。假设在前4节课中,2节课在1分钟内完
斯波克行为怪异