scala - 在 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 中返回异常的正确方法。
解决方案
你必须用来thenThrow(new RuntimeException("error in source"))
存根一个Exception
.
也就是说,有时您可能会发现检查异常的问题,因为 Scala 将所有异常都视为运行时,因此它们没有在签名中声明,标准 Mockito 将验证您是否正在对存根方法抛出的异常进行存根。
在mockito-scala中,该检查已被删除以确认所有异常在 Scala 中都表现为运行时这一事实
推荐阅读
- javascript - 反应语义ui,切换选项卡时如何重新渲染组件?
- php - 如何在字符串中包含零?
- php - 如何使用连接表在 Codeigniter 中进行分页?(CI_DB_mysqli_result 类的对象无法转换为字符串)
- c++ - 薄板样条形状变换运行时错误 [退出,代码 -1073741819]
- java - 将字符串从 Activity 发送到 Fragment
- angular - @ng-bootstrap/ng-bootstrap modals 需要更长的时间才能在 iphone 上打开
- c++ - 如何在 C++ 中将二进制转换为十六进制
- php - 通过 htaccess 用动态参数值重写 URL
- php - 单击提交按钮或搜索按钮后,在 URL 中动态获取国家/地区的 id
- html - 制作一个屏幕大小或内容大小的 div(以较大者为准)