我正在使用TestKit测试一个我正在参与Akka Actors的Scala项目的某些类,并且遇到了这个问题:One or more requested classes are not Suites: poc.PocConstituentsWatcher
有问题的类如下所示:
class PocConstituentsWatcher(_system: ActorSystem) extends TestKit(_system) with ImplicitSender with WordSpecLike with Matchers with BeforeAndAfter with BeforeAndAfterAll {
我以前没有这个问题,因为
def this() = this(ActorSystem)
但是现在我通过注入定义了自己的ActorSystem,所以我改为
val actorSystem = injector.instance[ActorSystem]
def this() = this(actorSystem)
我收到一条错误消息,指出找不到actorSystem。我认为是因为构造函数签名不正确?谢谢你的帮助。
编辑:
展示了如何注入演员系统。
val injector = Guice.createInjector(new AkkaModule)
val actorSystem = injector.instance[ActorSystem]
在AkkaModule中
object AkkaModule {
class ActorSystemProvider @Inject() (val config: Config, val injector: Injector) extends Provider[ActorSystem] {
override def get() = {
val system = ActorSystem("poc-actor-system", config)
GuiceAkkaExtension(system).initialize(injector)
system
}
}
}
class AkkaModule extends AbstractModule with ScalaModule {
override def configure() {
bind[ActorSystem].toProvider[ActorSystemProvider].asEagerSingleton()
}
}
最佳答案
我最终使用def this() = this(ActorSystem("poc-actor-system"))
起作用了,但有点担心,因为从技术上讲,默认构造函数不会使用与我创建的val actorSystem = injector.instance[ActorSystem]
相同的actor系统。如果将来发生任何问题,将向您报告。
关于scala - 使用Akka的Scala Testkit单元测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31794455/