gpt4 book ai didi

scala - 如何测试返回 Future 的方法?

转载 作者:行者123 更新时间:2023-12-03 14:32:24 24 4
gpt4 key购买 nike

我想测试一个返回 Future 的方法.我的尝试如下:

import  org.specs2.mutable.Specification
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Failure, Success}

class AsyncWebClientSpec extends Specification{

"WebClient when downloading images" should {
"for a valid link return non-zero content " in {
val testImage = AsyncWebClient.get("https://www.google.cz/images/srpr/logo11ww.png")
testImage.onComplete { res =>
res match {
case Success(image) => image must not have length(0)
case _ =>
}
AsyncWebClient.shutDown
}
}
}
}

除了我无法使这段代码正常工作之外,我猜可能有更好的方法来使用 Future 测试 future 。面向匹配器。

如何在specs2中正确执行?

最佳答案

Await 是一种反模式。永远不应该使用它。
您可以使用 ScalaFutures 等特征, IntegrationPatience , 和 Eventually .whenReady做你正在寻找的魔法。
例子:

import org.specs2.mutable.Specification
import scala.concurrent.ExecutionContext.Implicits.global
import scala.util.{Failure, Success}
import org.scalatest.concurrent.{IntegrationPatience, ScalaFutures}
import scala.concurrent.Future

class AsyncWebClientSpec extends Specification
with ScalaFutures
with IntegrationPatience {

"WebClient when downloading images" should {

"for a valid link return non-zero content " in {

whenReady(Future.successful("Done")){ testImage =>

testImage must be equalTo "Done"
// Do whatever you need
}

}
}
}

关于scala - 如何测试返回 Future 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27750244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com