【发布时间】:2018-09-07 09:16:23
【问题描述】:
我在 Spock 测试中使用内部 kotlin 函数时遇到问题。这是我的 spock 测试的简短 sn-p:
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()
}
还有我的 MonetaryPreconditions 类:
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)
}
}
}
我的测试因堆栈跟踪而失败:
groovy.lang.MissingMethodException:没有方法签名:touk.recruitment.parkandrest.parkingmanagement.core.monetary.MonetaryPreconditions.checkMonetariesCurrencies() 适用于参数类型:(touk.recruitment.parkandrest.parkingmanagement.core.monetary.货币,touk.recruitment.parkandrest.parkingmanagement.core.monetary.Monetary) 值:[touk.recruitment.parkandrest.parkingmanagement.core.monetary.Monetary@7c417213, ...]
问题在于我的 checkMonetariesCurrencies 函数的内部可见性。如果我将其更改为 public,它就可以正常工作,但是我确实希望它是模块私有的。如何使用 Spock 实现这一目标?
关于我的项目的其他信息:
- 测试类和 MonetaryPreconditions 具有相同的包。
- 我正在使用 Maven。
- 测试类和 MonetaryPreconditions 当然在同一个模块中。
【问题讨论】: