我是整个生态系统的新手,包括Akka
,ScalaTest
和Actor
我正在解决我的case object LogProcessRequest
class LProcessor extends Actor {
val log = Logging(context.system, this)
def receive = {
case LogProcessRequest =>
log.debug("starting log processing")
LogReaderDisruptor main(Array())
}
}
给外部系统打电话的问题。
LogReaderDisruptor main(Array())
Java
是一个class LProcessorSpec extends UnitTestSpec("testSystem") {
"A mocked log processor" should {
"be called" in {
val logProcessorActor = system.actorOf(Props[LProcessor])
logProcessorActor ! LogProcessRequest
}
}
}
类,可以执行许多其他操作。
我目前的测试似乎是
UnitTestSpec
import akka.actor.ActorSystem
import akka.testkit.{ImplicitSender, TestKit}
import org.scalatest.matchers.MustMatchers
import org.scalatest.{BeforeAndAfterAll, WordSpecLike}
abstract class UnitTestSpec(name: String)
extends TestKit(ActorSystem(name))
with WordSpecLike
with MustMatchers
with BeforeAndAfterAll
with ImplicitSender {
override def afterAll() {
system.shutdown()
}
}
看起来像(并且受到here的启发)
LogReaderDisruptor main(Array())
问题
Java
的调用并验证它是否被调用? 我来自JUnit
,Mockito
,doNothing().when(logReaderDisruptor).main(Matchers.<String>anyVararg())
verify(logReaderDisruptor, times(1)).main(Matchers.<String>anyVararg())
土地和我本来会做的事情
recip
我不知道如何在这里使用ScalaTest进行翻译。
此外,这段代码可能不是惯用的,因为我很新并且学习
答案 0 :(得分:0)
有几种方法可以做到这一点。 OO方式的一种方式是将logDisrupter包装为一个对象并将其传入。我将设置一个伴随对象来实例化actor。像下面的东西。然后你可以通过备用实现。您也可以通过仅在需要时使用特征和混合替代logDisrupter来实现类似的方法。
object LProcessor {
def props(logDisrupter : LogDisrupter) = Props(new LProcessor(logDisrupter))
}
class LProcessor(logDisrupter : LogDisrupter) extends Actor {
val log = Logging(context.system, this)
def receive = {
case LogProcessRequest =>
log.debug("starting log processing")
logDisrupter.doSomething();
}
}
然后设置为
val logProcessorActor = system.actorOf(LProcessor.props(logDisrupter))