Akka TestKit之外的日志记录

3

我一直在尝试将我的scalaTest日志记录如下:

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


  val log = Logging(system, this)

基本上,我们可以说ChangesetActorTest继承自TestKit(system)。
不幸的是,Logging(system, this)与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)
我认为在Akka Logging Doc中,这是以下要点: 在所有其他情况下,除非对于相关类型存在一个隐式LogSource[T],否则会出现编译错误。
换句话说,没有LogSource[TestKit]。
我希望找到最简单的解决方案来处理这个问题,并且尽量少进行额外配置。到目前为止,我所做的是以下内容,一切都按预期工作:
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
}

我的问题是,这是否是推荐的方法。到目前为止,来自我的actor和测试的消息顺序已经很好地排序了。

在统一的方式下记录登录的建议方法是什么:

  1. 同时从测试类(例如上面)和Actor中进行记录?

  2. 如果使用需要外部类进行记录的系统,并且我们需要进行统一的日志记录(异步)。

2个回答

0

0

在TestKit中登录的最简单方法是:

  1. 从 underlyingActor 获取记录器:

    val mockActor = TestActorRef(new XXXActor)
    val log = mockActor.underlyingActor.log
    
  2. 使用 FeatureSpecLike

http://doc.scalatest.org/3.0.1-2.12/org/scalatest/FeatureSpecLike.html

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

//...
alert("Something like warning")
info("Infos")
note("Green infos")
markup("documents")

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接