gpt4 book ai didi

scala - 如何使用 Scala 和 Mockito 测试异步副作用

转载 作者:行者123 更新时间:2023-12-02 21:06:17 25 4
gpt4 key购买 nike

我有一个简单的场景,我在第 3 方服务上做了一些工作,如果其中一个服务出现故障,那么我想清理已完成的工作。

客户端不需要等待清理完成即可获得响应,因此清理是作为副作用异步函数完成的。

在使用 Mockito 时,我想验证是否调用了清理方法,但我遇到了竞争条件和非确定性测试。

这是代码片段:

val eventualImage = imageService.saveImage(uploadedImage, None, parent, imageActions)
ScalaFutures.whenReady(eventualImage.failed, timeout(6 seconds), interval(15 millis)) { ex =>
val x = Mockito.verify(mockS3Repository, Mockito.times(1)).deleteFileFromS3(s3Location) // where this function is pure async and nothing is waiting for her to complete
ex shouldBe a [exception.type]
}

有什么方法可以让我在不更改代码的情况下等待它完成吗?

最佳答案

正如 @Lodewijk Bogaards 在他的评论中建议的那样。使用最终 block 解决了我的问题。

这是一个例子:

首先将 with Final 添加到类声明中

然后问题中的代码将像这样完成:

      val eventualImage = imageService.saveImage(uploadedImage, None, parent, imageActions)
ScalaFutures.whenReady(eventualImage.failed, timeout(6 seconds), interval(15 millis)) { ex =>
ex shouldBe a [exception.type]
eventually(timeout(6 seconds), interval(15 millis)){
Mockito.verify(mockS3Repository, Mockito.times(1)).deleteFileFromS3(s3Location)
}
}

关于scala - 如何使用 Scala 和 Mockito 测试异步副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35828675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com