在 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 中都表现为运行时
我有一个包装器 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 中都表现为运行时