gpt4 book ai didi

scala - 单元测试异步 Scala 代码

转载 作者:行者123 更新时间:2023-12-04 15:33:52 26 4
gpt4 key购买 nike

尝试并发执行我想知道如何实际测试它。
执行流程具有副作用性质,并创建 future 以包装独立的执行/处理。

一直在寻找一些关于如何正确单元测试以下场景的好例子( foo bar 是我希望测试的方法):

场景#1

def foo : 单位 = {
future {做某事}
future { doSomethingElse }
}

私有(private) def doSomething : 单位 = serviceCall1
私有(private)定义 doSomethingElse :单位 = serviceCall2

情景动机
foo立即返回但调用 2 个执行单独任务的 future (例如,保存分析并将记录存储到数据库)。可以模拟这些服务调用,但我要测试的是,一旦我将它们包装在 Future 中,它们就会被调用。 s

场景#2

def bar : 单位 = {
val futureX = doAsyncX
val futureY = doAsyncY
为了 {
x <- future X
y <- future Y
} 屈服 {
noOp(x, y)
}
}

情景动机

从可以同时执行的长时间运行的计算开始(例如,获取总访问者的数量并获取我们网站常用的 User-Agent 标题)。将结果组合到其他一些操作中(在这种情况下 Unit 方法只是简单地抛出值)

备注 我熟悉 Actor 和测试 Actor ,但鉴于上面的代码,我想知道最合适的方法应该是什么(包括重构)

编辑 我现在在做什么

隐式值上下文 = ExecutionContext.fromExecutor(testExecutor)

def testExecutor = {
新执行者{
def execute(runnable : Runnable) = runnable.run
}
}

这个ExecutionContext实现不会运行 Future作为一个单独的线程,整个执行将按顺序完成。这有点像黑客,但基于 电僧答案,似乎其他解决方案更相同。

最佳答案

一种解决方案是使用 DeterministicExecutor .不是一个大规模的解决方案,但应该如此。

关于scala - 单元测试异步 Scala 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25168918/

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