0

私はScala 2.10.2とAkka 2.2を使用しており、次のテストを行っています

import org.junit._
import Assert._
import scala.util.{Failure, Success}
import net.liftweb.json._
import akka.actor.ActorSystem
import akka.event.Logging

class AppTest {
  implicit val system = ActorSystem("annotator-common")
  import system.dispatcher // execution context for futures below

  val log = Logging(system, getClass)

@Test
  def testHttp() = {
    import scala.concurrent.ExecutionContext

    val respBody = AsyncHttpProvider.getResponseBodyAsJValue("http://some-json-api-url")

    respBody onComplete {
      case Success(contents) => {
        val x = contents \\ "self"
        log.info(x.toString)
      }
      case Failure(error) => log.error(error.toString)
    }
    Thread.sleep(2000) //adding this allows the future to complete before the test
  }
}

AsynHttProvider.getResponseBodyAsJValue戻りますFuture[JValue]。http 呼び出しが失敗するか成功するかに関係なく、コンソール出力が得られません。誰でも理由を知っていますか?

編集 実際には言及しなかったのは、非未来ベースのhttp APIへの呼び出しを追加すると、両方の呼び出しのログ出力が出力されるため、ログ設定ではないと思います. さらに言えば、同じ問題がprintln.

これを追加することで問題を解決できます。上記の更新されたコードを参照してください

Thread.sleep(2000)
4

1 に答える 1

3

私の推測では、フューチャが実行される前にテストが終了します。つまり、void を返しますが、未来が完了するのを待ちません。

于 2013-07-27T07:09:16.950 に答える