2013-07-27 2 views
0

Я на Scala 2.10.2 и Акку 2.2 и имеет следующий тестAkka не показывает выход журнала

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-вызовы, я не получаю никакого вывода на консоль. Кто-нибудь знает почему?

EDIT На самом деле то, что я не упомянул, что если я добавить вызов к не в будущем на основе HTTP API, это будет распечатать журнал вывода обоих вызовов, так что я не думаю, что это журнал настройки. В этом отношении я вижу ту же проблему с println.

Я могу решить эту проблему путем добавления этого, см обновленного кода выше

Thread.sleep(2000) 
+0

Очевидный первый вопрос: посмотрели ли вы параметры ведения журнала [здесь] (http://doc.akka.io/docs/akka/2.2.0/scala/logging.html)? Скорее всего, вы могли бы отключиться. –

+0

@ S.R.I, пожалуйста, см. Мой отредактированный вопрос, спасибо. – Bob

ответ

3

Моей догадки: Испытание прекращается до будущего было выполнено. То есть вы возвращаетесь в пустоту, но не ждите, когда будущее будет завершено.

+0

Я думаю, что вы правы, так что лучший способ это исправить? Я попытался использовать Await.result без успеха. – Bob

+0

Вам нужно подождать что-то, что будет завершено после завершения регистрации. В настоящее время вы регистрируете асинхронный обратный вызов, который запускается через некоторое время, чистый побочный эффект (onComplete возвращает Unit). Например, вы должны посмотреть на. –

+0

А, ну, а что, если мне не нужно делать что-нибудь еще после моего ведения журнала? Есть ли лучший способ справиться с чем-то подобным? – Bob

Смежные вопросы