【发布时间】:2021-06-20 06:27:27
【问题描述】:
我正在为函数 bar 编写测试:
def bar(fut1: Future[Int],
fut2: Future[Int],
fut3: Future[Int]): Future[Result] = ???
bar 像这样返回Result:
case class Result(
x: Int, // fut1 value
oy: Option[Int], // if fut2 is complete then Some of fut2 value else None
oz: Option[Int] // if fut3 is complete then Some of fut3 value else None
)
我想为所有测试用例编写测试:
-
fut1已完成,fut2和fut3未完成 -
fut1完成,fut2完成,fut3未完成 - 等
所以我正在为这些测试编写函数foo1、foo2 和foo3 的假 实现。
def foo1(x: Int): Future[Int] = ???
def foo2(x: Int): Future[Int] = ???
def foo3(x: Int): Future[Int] = ???
Test #1 调用所有这些函数,检查 fut1 是否先完成,然后调用 bar
val fut1 = foo1(0)
val fut2 = foo2(0)
val fut3 = foo3(0)
// make sure `fut1` completes first
测试#2 调用所有这些函数,确保fut2 首先完成,然后调用bar。
测试#3 调用所有这些函数,确保fut3 首先完成,然后调用bar。
我的问题是如何实现函数foo1、foo2和foo3以及测试。
【问题讨论】:
-
如果它们是异步的,为什么它们完成的顺序很重要?
-
@ViktorKlang 顺便说一句,非常好的问题,在尝试找到答案之前我应该自己问一下。
-
@ViktorKlang 这对测试很重要。我想测试三个不同的用例。想象一下,我正在为
firstCompletedOf编写测试。 -
@ViktorKlang 我更新了问题并意识到您是对的,异步操作的顺序并不重要。谢谢。
-
不客气,@Michael
标签: scala testing concurrency future