2016-08-08 3 views
1

Я пытался Войти вещи внутри моего scalaTest как таковой:Вход в Akka тестового набора внешних акторов

class ChangeSetActorTest extends PersistenceSpec(ActorSystem("Persistent-test-System")) with 

PersistenceCleanup {

val log = Logging(system, this) 

В принципе, давайте просто скажем, что ChansetActorTest наследуют от тестового набора (система)

К сожалению

Logging(system, this)

не работает с этим

Я получаю следующее Ошибка:

[error] /Users/maatary/Dev/IdeaProjects/PoolpartyConnector/src/test/scala/org/iadb/poolpartyconnector/changepropagation/ChangeSetActorTest.scala:22: Cannot find LogSource for org.iadb.poolpartyconnector.changepropagation.ChangeSetActorTest please see ScalaDoc for LogSource for how to obtain or construct one. [error] val log = Logging(system, this)

Я считаю, в Logging Doc Akka это следующий пункт: и во всех других случаях ошибка компиляции возникает, если и неявное LogSource [Т] не находится в области видимости для рассматриваемого типа.

Другими словами нет LogSource [тестового набора]

Я хотел бы самым простым решением для решения этого вопроса, с минимальной дополнительной конфигурации. До сих пор, что я сделал это следующий и все работает, как ожидалось:

class ChangeSetActorTest extends PersistenceSpec(ActorSystem("Persistent-test-System")) with 

PersistenceCleanup {

 val log = system.log 

Оттуда я просто пойти и сделать что-то вроде

val received = chgtFetcher.receiveWhile((requestInterval + ProcessingLag).*(3)) { 
    case msg:FetchNewChangeSet => log.info(s"received: ${msg}") ; chgtFetcher.reply(NoAvailableChangeSet); msg 
} 

Мой вопрос, это рекомендуется appraoch. Пока порядок сообщения от моего актера и одного из теста хорошо упорядочен.

Пожалуйста облако вы дайте мне знать, рекомендуемое appraoch войти в единую appraoch:

1 - Из класса Test (например, выше) и актер в то же время?

2 - Если вы используете систему, в которой должен также регистрироваться внешний класс, и нам нужно одно унифицированное ведение журнала (асинхронное).

Большое спасибо

-M-

ответ

0

Посмотрите на этот комментарий: https://github.com/akka/akka/blob/master/akka-actor/src/main/scala/akka/event/Logging.scala#L196-L237

Я считаю, более прямой подход будет определять ваш implicitLogSource[ChangeSetActorTest] локально.

т.е:

val log = { 
    implicit val logSource = new LogSource[ChangeSetActorTest] { 
    override def genString(t: ChangeSetActorTest) = "ChangeSetActorTest" 
    } 
    Logging(system, this) 
} 
Смежные вопросы