Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala:单元测试异步调用的方法并返回未来_Scala_Scalatest - Fatal编程技术网

Scala:单元测试异步调用的方法并返回未来

Scala:单元测试异步调用的方法并返回未来,scala,scalatest,Scala,Scalatest,我有一个Scala方法,如下所示: def doAnAsynchOperation(bunchedFilesUnit:BunchOfFilesUnit): Future[FilesHandled] = { val handleFuture = future { BunchOfFilesUnit.unit.map(file => { //FileParsing code - insta

我有一个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()
            }
         })
    }
我在我的单元测试中调用这个方法,用“descripe”编写,在它里面,我将有一个“it”

有5条线。每个线程被分配处理单个bunchedfluenit的任务

这5个线程正在异步调用DOANASynchronousOperation方法(每个线程自己调用),以处理自己的BunchedFileUnit,该方法返回一个未来的[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("------------"){

         }

    }

我要冒险出去,我猜你在找“助手”。我看到您已经导入了ScalaFutures,因此您可以在示例中执行以下操作:

val files = Seq(...)    
whenReady(doAnAsynchOperation(files), timeout(Span(6, Seconds))) { result =>
  result mustEqual "the correct value"
}
如果您试图测试失败条件,您可以尝试给它一个非常短的超时时间,但我不确定除了确保它不会完成得太快或太长之外,还能完成什么