【问题标题】:How to test a kotlin suspend function with Spock (groovy)如何使用 Spock (groovy) 测试 kotlin 挂起功能
【发布时间】:2020-02-22 20:05:31
【问题描述】:

我有以下kotlin挂起功能:

suspend fun registerNewTransaction(transaction: String): String

我正在尝试通过Spock 对其进行测试,但是我没有找到在不指定Continuation<? super String> 参数的情况下调用此kotlin 挂起函数的方法,因为Groovy 将kotlin 容器类标识为Java 类。 我想知道是否可以从另一种基于 JVM 的语言中调用挂起函数,否则我将不得不使用另一个测试库,如 JUnit。

【问题讨论】:

  • 了解你最终做了什么会很有趣。它可能会帮助其他 Kotlin 和/或 Spock 用户。 :-)
  • @kriegaex,一年前,我不得不在一个使用 JUnit 和 Spek 作为测试库的 Kotlin 项目中工作。现在我在一个 Java 项目中工作,他们将 Spock 实现为测试库,我意识到它是多么强大和具有描述性,我想用 Kotlin 来实现它,因为 Kotlin 是我现在最喜欢的编程语言。 ;)
  • 感谢您的回复。 :-) 它解释了你的动机,但没有回答我关于你最终做了什么的问题(你的决定/解决方案如何进行)。
  • @kriegaex 嗨,现在有什么线索吗?我对使用 Kotlin 的 Spock 非常感兴趣。

标签: kotlin groovy spock kotlin-coroutines


【解决方案1】:

您可以模拟 kotlin 正在编译到方法调用中的 Continuation 对象。这段代码对我有用:

// mocked continuation
def continuation = Mock(Continuation) {
  getContext() >> Mock(CoroutineContext)
}

// method call which should be tested
subjectUnderTest.suspendableMethod(someParameter, continuation)

【讨论】:

    【解决方案2】:

    如果可以从另一个基于 JVM 的调用挂起函数 语言

    这是可能的,但是您需要将 Continuation 作为最后一个参数传递,因为 Kotlin 就是这样编译 suspend 函数的

    我建议使用 Kotlin 来测试 Kotlin 代码,有很多 Kotlin 特定的库,例如支持协程的 mockk

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多