我一直在尝试在scalaTest中记录内容:
class ChangeSetActorTest extends PersistenceSpec(ActorSystem("Persistent-test-System")) with
PersistenceCleanup {
val log = Logging(system, this)
基本上我们只是说ChansetActorTest继承自TestKit(系统)
不幸的是
Logging(system, this)
无法使用此
我收到以下错误:
[错误] /Users/maatary/Dev/IdeaProjects/PoolpartyConnector/src/test/scala/org/iadb/poolpartyconnector/changepropagation/ChangeSetActorTest.scala:22: 找不到LogSource org.iadb.poolpartyconnector.changepropagation.ChangeSetActorTest 请参阅ScalaDoc for LogSource,了解如何获取或构建一个。 [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
}
我的问题,这是推荐的appraoch。到目前为止,来自我的演员和来自测试的消息的顺序是有序的。
请云你告诉我推荐的appraoch登录统一的appraoch:
1 - 从Test类(例如上面)和Actor同时进行?
2 - 如果使用外部类需要记录的系统,我们需要进行一次统一记录(异步)。
非常感谢
-M -
答案 0 :(得分:0)
我认为更直接的方法是在本地定义implicit
LogSource[ChangeSetActorTest]
。
即:
val log = {
implicit val logSource = new LogSource[ChangeSetActorTest] {
override def genString(t: ChangeSetActorTest) = "ChangeSetActorTest"
}
Logging(system, this)
}
答案 1 :(得分:0)
登录TestKit的最简单方法是:
从底层Actor获取记录器:
val mockActor = TestActorRef(new XXXActor)
val log = mockActor.underlyingActor.log
使用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")
}