【问题标题】:Test that a scalatest futureconcept throws a specific exception测试一个可扩展的未来概念是否抛出了一个特定的异常
【发布时间】:2015-04-16 23:30:32
【问题描述】:

我想测试我的返回 twitter.Future 的代码在未满足要求时会抛出 IllegalArgumentException。

我正在使用 scala 测试,其中包含从 twitter.Future 到 FutureConcept 的隐式转换(类似于 ScalaFutures 特征的工作方式,但适用于 twitter Futures)

但我找不到应该怎么做!

我尝试了以下方法:

whenReady(methodThrowingExceptionFromFuture) {...handling}

这会在到达处理部分之前将异常作为 TestFailedException 抛出,因此它不会根据需要拦截异常。 所以我尝试拦截:

intercept[IllegalArgumentException] { future.futureValue }

但这里也一样。我认为 FutureConcept 将异常包装为 TestFailedException 所以我正在考虑解包真正的异常,但肯定有其他方法可以与 scala 期货一起处理负面测试用例吗?

【问题讨论】:

标签: scala future scalatest


【解决方案1】:

我找到了隐藏在this response 中的答案。基本上,将您最初未来的failed 投影传递给whenReady 和亲属。

whenReady(methodThrowingExceptionFromFuture.failed) { ...handling... }

或者只是测试是否抛出了预期的异常类型:

methodThrowingExceptionFromFuture.failed.futureValue shouldBe a [MyException]

【讨论】:

  • 如果我理解你的答案是正确的,它指的是 Scala 期货。由于我们使用 Twitter 期货,因此没有任何失败的预测可用。
  • 你只需要实现失败的方法。这就是它在 Scala Futures 中的实现方式:github.com/scala/scala/blob/v2.11.7/src/library/scala/…
猜你喜欢
  • 2019-06-11
  • 2021-08-25
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 2010-09-11
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
相关资源
最近更新 更多