我有一个Scala方法,内容如下:
def doAnAsynchOperation(bunchedFilesUnit:BunchOfFilesUnit):
Future[FilesHandled] = {
val handleFuture = future {
BunchOfFilesUnit.unit.map(file => {
//FileParsing code - instantiate a class for file parsing
//Open a fileInputStream
//get an OutputStream
try {
//do some parsing, pass in a "file" invoke a parsing method
} catch {
case e:Throwable =>
//some code
} finally {
fileInputStream.close()
outStream.close()
}
})
}
我在单元测试中用“描述”编写这个方法,在其中,我将会有一个“它”。
有5个主题。每个线程都被分配了处理单个BunchedFileUnit的任务。
这5个线程异步调用doAnAsynchOperation方法 - 每个都自己 - 来处理它们自己的BunchedFileUnit,这个方法返回一个Future [BunchedFileUnit]。
我想要完成的是:
我想编写一个或多个测试来测试这个场景。我想加入暂停。
我不太清楚这里的超时概念,但我假设我必须设置超时并预期TimeOutException。我怎样才能为这种场景布置测试?这就是我想要完成的。
目前,我正按以下方式进行测试:
import org.scalatest._
import org.scalatest.concurrent.ScalaFutures
import scala.concurrent.{Await, ExecutionContext, duration, Future}
import duration._
import akka.actor.{Actor, ActorRef, ActorSystem}
import org.scalatest.MustMatchers
import java.io.File
class FileHandlerTest extends FunSpec
with MustMatchers
with ScalaFutures
with BeforeAndAfter with SomeTraitThatINeeed {
describe("------------"){
}
}
答案 0 :(得分:0)
我会走出困境,猜猜你正在寻找“whenReady”助手。我看到你已经导入了ScalaFutures,所以你在你的例子中做了类似的事情:
val files = Seq(...)
whenReady(doAnAsynchOperation(files), timeout(Span(6, Seconds))) { result =>
result mustEqual "the correct value"
}
如果您正在尝试测试失败情况,您可以尝试给它一个非常短暂的超时,但我不确定除了确保它不会完成太快或花费太长时间后会做什么。< / p>