首页 > 解决方案 > 在 Akka Streams 中模拟源

问题描述

我有一个包装类AwsS3Bucket,它在被调用时返回一个 source Source[ByteString, NotUsed]。在我的单元测试用例中,我模拟了这个客户端并做了必要的断言。

val source = Source.fromIterator(() => List(ByteString("some string")).toIterator)
when(awsS3Bucket.getSource(any[String])).thenReturn(source)

但是,现在我想测试我希望getSource方法抛出异常的错误场景。我尝试了以下代码,

val error = new RuntimeException("error in source")
when(awsS3Bucket.getSource(any[String])).thenReturn(error)

但它给了我一个编译问题,说

Cannot resolve overloaded method thenReturn

任何人都可以让我知道在 akka 流的 Source 中返回异常的正确方法。

标签: scalamockitoakka-stream

解决方案


你必须用来thenThrow(new RuntimeException("error in source"))存根一个Exception.

也就是说,有时您可能会发现检查异常的问题,因为 Scala 将所有异常都视为运行时,因此它们没有在签名中声明,标准 Mockito 将验证您是否正在对存根方法抛出的异常进行存根。

mockito-scala中,该检查已被删除以确认所有异常在 Scala 中都表现为运行时这一事实


推荐阅读