我正在使用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/

10-09 02:56