【问题标题】:Scala dummy Future not completedScala dummy Future 未完成
【发布时间】:2023-04-05 13:34:02
【问题描述】:

我对 Scala 还是很陌生,我想知道是否有某种方法可以创建一个虚拟的 Future 对象来模拟 isCompletedfalse。我需要这个来进行测试。

目前我用来拥有一个假人Future[Int] 是这样的:

Future({
    while (true) {}
    1
})

这很丑。

编辑 我有一个object 和一个变量x,它是一个Option[Future[Int]]。在同一个object 中,我有方法检查x 是否与None 不同,如果是,则检查它是否完成。如果未来尚未完成,它会避免调用外部辅助对象上的方法。测试期间的这个外部助手对象被模拟,我正在检查它是否被调用。为了实现这一点,我目前将x 变量设置为上面写的Future

【问题讨论】:

  • 为什么你不能使用 Future.successful(1) 来达到这个目的。
  • 并使问题更清楚,它太笼统了。你正在做什么样的测试,你到底想做什么。

标签: scala testing future


【解决方案1】:

还有一个简单的:

val f: Future[Int] = Future.never

【讨论】:

    【解决方案2】:

    使用Future.never,也是this answer首先建议的:

    val f: Future[Int] = Future.never
    

    您应该避免使用承诺(正如这个答案最初建议的那样):

    val f: Future[Int] = Promise[Int]().future
    

    如果订阅未来可能会导致内存泄漏,请参阅here 了解说明。

    【讨论】:

    • Future.never 是更好的解决方案,因为它明确了目的。
    • 请永远不要那样做——你看,所有的回调都将被添加,你会静默泄漏内存,直到 Future 不再被任何地方引用。使用 Future.never 代替。在此处阅读更多信息:viktorklang.com/blog/Futures-in-Scala-2.12-part-6.html
    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 2017-08-01
    • 2020-04-16
    • 2018-10-13
    相关资源
    最近更新 更多