在 Akka Streams 中模拟源

Mocking a Source in Akka Streams

我有一个包装器 class AwsS3Bucket,当调用它时,returns 一个源 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 中返回异常的正确方法。

您必须使用 thenThrow(new RuntimeException("error in source")) 存根 Exception

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

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