单元测试异步scala代码
发布时间:2020-12-16 18:48:46 所属栏目:安全 来源:网络整理
导读:尝试并发执行我想知道如何实际测试它. 执行流程具有副作用,并且创建期货以包装独立的执行/处理. 一直在寻找一些关于如何正确单元测试以下场景的好例子(foo和bar是我想测试的方法): 场景#1 def foo : Unit = { Future { doSomething } Future { doSomethingE
尝试并发执行我想知道如何实际测试它.
执行流程具有副作用,并且创建期货以包装独立的执行/处理. 一直在寻找一些关于如何正确单元测试以下场景的好例子(foo和bar是我想测试的方法): 场景#1 def foo : Unit = { Future { doSomething } Future { doSomethingElse } } private def doSomething : Unit = serviceCall1 private def doSomethingElse : Unit = serviceCall2 情景动机 foo立即返回,但调用2个期货执行单独的任务(例如,将分析和存储记录保存到DB).这些服务调用可以被模拟,但我试图测试的是,一旦我将它们包装在Futures中,这两个服务都被调用 场景#2 def bar : Unit = { val futureX = doAsyncX val futureY = doAsyncY for { x <- futureX y <- futureY } yield { noOp(x,y) } } 情景动机 从可以同时执行的长时间运行计算开始(例如,获取总访问者数量并将常用的User-Agent标头添加到我们的网站).将结果合并到其他一些操作中(在这种情况下,Unit方法只是抛出值) 注意我熟悉演员和测试演员,但考虑到上面的代码,我想知道什么应该是最合适的方法(包括重构) 编辑我现在在做什么 implicit value context = ExecutionContext.fromExecutor(testExecutor) def testExecutor = { new Executor { def execute(runnable : Runnable) = runnable.run } } 此ExecutionContext实现不会将Future作为单独的线程运行,整个执行将按顺序完成.这种感觉就像一个黑客,但根据Electric Monk的回答,似乎其他解决方案更像是一样. 解决方法
一种解决方案是使用
DeterministicExecutor.不是scalaesque解决方案,但应该如此诀窍.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- scala – 在Spark SQL中,如何注册和使用通用UDF?
- 使用 redis-py 储存Geo地理位置数据
- 测试 – Scala构建工具和测试框架可以很好地协同工作吗?
- Angular2 Http请求如何将body作为二进制返回?
- AngularJS(4)——ionic框架下实现 Localstorage本地存储
- Angular HTTP Interceptor – 在多模块应用程序中显示微调器
- 网络 – 为什么我不能ping泊坞容器?
- Angular 6,我应该在environment.ts文件中放置秘密环境变量吗
- 嵌套的Scala匹配为什么Some(Some(1),1)无法匹配?
- [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操