如何测试返回 Future 的方法?

2024-04-25

我想测试一个返回a的方法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面向匹配器。

如何在specs2中正确地做到这一点?


您可以使用Matcher.await方法来变换一个Matcher[T] into a Matcher[Future[T]]:

val testImage: Future[String] =
   AsyncWebClient.get("https://www.google.cz/images/srpr/logo11ww.png")  

// you must specify size[String] here to help type inference
testImage must not have size[String](0).await

// you can also specify a number of retries and duration between retries
testImage must not have size[String](0).await(retries = 2, timeout = 2.seconds)

// you might also want to check exceptions in case of a failure
testImage must throwAn[Exception].await
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何测试返回 Future 的方法? 的相关文章

  • 玩 Scala Akka WebSockets 更改 actor 路径

    我遵循使用 Scala Play 和 Akka Actor 创建 Web 套接字的示例 https www playframework com documentation 2 5 x ScalaWebSockets Handling Web
  • sbt 程序集中的合并策略和缺少的应用程序加载器

    我正在开发一个 Play Web 应用程序 我希望能够使用 sbt 程序集将其部署为 fat jar 在调试中运行应用程序时 我可以识别 guice 库 因为它已添加到我的 build sbt 文件中 libraryDependencies
  • 在java中使用scala包对象中的vals

    我有一个 Scala 包对象 其中声明了 vals 因此我可以使用常见的对象 而无需每次都导入它们 然而 我也想在 Java 中使用这些定义 但是 Java 不允许导入任何称为 package 的东西 它是 Scala 创建的类的名称 有没
  • Spark JDBC 仅返回带有列名的数据帧

    我正在尝试使用 Spark JDBC 连接到 HiveTable 代码如下 val df spark read format jdbc option driver org apache hive jdbc HiveDriver option
  • 从字符串构造简单的 Scala 案例类,严格不使用样板

    我寻求简洁的代码来从字符串 例如 csv 行 初始化简单的 Scala 案例类 case class Person name String age Double case class Book title String author Str
  • 强制 Scala 特征实现某种方法

    有没有办法指定特征必须提供方法的具体实现 给定一些 mixin class A extends B with C foo 如果出现以下任一情况 程序将编译A B or C实施foo 但是我们如何才能强制 例如 B包含装有foo的实施 您可以
  • 如何在使用 Json4s 序列化期间重命名字段?

    如何轻松重命名 json4s 中的字段名称 从他们的文档中 我尝试了以下代码片段 但它似乎没有重命名serial字段到id case class Person serial Int firstName String val rename F
  • Spark:如何从spark shell运行spark文件

    我正在使用CDH 5 2 我能够使用火花外壳运行命令 如何运行包含 Spark 命令的文件 file spark 有没有办法在没有 sbt 的情况下在 CDH 5 2 中运行 编译 scala 程序 在命令行中 您可以使用 spark sh
  • Play2 的异常无法在 postgresql 上运行

    我发现play2的anorm的行解析器依赖于jdbc驱动程序返回的元数据 所以在play提供的内置示例 zentasks 中 我可以找到这样的代码 object Project val simple get Pk Long project
  • 无法向 kafka 主题发送消息

    我正在使用 Kafka Play 以及 Scala 这是我的代码 我想在其中发送消息到kafka服务器 主题名称是 测试主题 尽管我没有在主题中看到我发送的消息 但我没有收到任何错误 这里有什么问题吗 import kafka produc
  • JVM 是否会内联对象的实例变量和方法?

    假设我有一个非常紧密的内部循环 每次迭代都会访问和改变一个簿记对象 该对象存储有关算法的一些简单数据 并具有用于操作它的简单逻辑 簿记对象是私有的和最终的 并且它的所有方法都是私有的 最终的和 inline 下面是一个示例 Scala 语法
  • 如何使用 Apache Livy 设置 Spark 配置属性?

    我不知道在向 Apache Livy 提交 Spark 作业时如何以编程方式传递 SparkSession 参数 这是测试 Spark 作业 class Test extends Job Int override def call jc J
  • Scala 中两个地图的交集和合并/连接

    假设我有两张类似这样的地图 val m1 Map 1 gt One 2 gt Two 3 gt Three val m2 Map 2 gt 2 0 3 gt 3 0 4 gt 4 0 我想根据键获取交集并返回一个表示合并值的元组 结果看起来
  • Scala 方法和高级类型参数

    我试图在 scala 中定义一个方法 它采用通用类型S lt Seq Double 并返回一个 S FixedLoad FixedLoad 是一个具体类型 但我的实现给了我错误 我不明白为什么 尽管我多次尝试去理解参数类型和高级类型 但我的
  • 如何更改 SparkContext.sparkUser() 设置(在 pyspark 中)?

    我是新来的Spark and pyspark 我使用 pyspark 之后我rdd处理中 我试图将其保存到hdfs使用saveAsTextfile 功能 但我得到一个 没有权限 错误消息 因为 pyspark 尝试写入hdfs使用我的本地帐
  • 如何从命令行运行scala文件?

    scala是否支持scala run xxx scala go语言支持这样运行 go my go 并且Python支持 python my py 但看来 scala xxx scala 仅进行语法检查 未观察到任何输出或运行行为 那么有没有
  • 在 case 语句中间使用 unapply 的对象

    scala gt object Test def unapply L R v L R Some v defined object Test scala gt 1 2 match case 1 Test 2 gt println First
  • 'val' 或 'var',可变还是不可变?

    我可以定义一个变量 通过var 是不可变的 var x scala collection immutable Set aaaaaa bbbbbb println x isInstanceOf scala collection immutab
  • 案例类和案例对象之间的区别?

    我正在学习 Scala 和 Akka 并且在最近的查找中solution https stackoverflow com questions 22770927 waiting for multiple results in akka 我发现
  • Scala:获取 Map.head 元素的键(和值)

    让我们想象一下以下不可变的 Map val foo Map 10 ten 100 one hundred 我想获得第一个元素的密钥 foo head获取第一个元素 但接下来呢 我还想要这个元素的值 即 十 设置键 值对 val key va

随机推荐