我想编写一个使用Akka actor并从sbt运行的ScalaTest测试套件。当我尝试这样做时:
class Tests extends FunSuite with BeforeAndAfterAll {
override protected def beforeAll() {
class Actor1 extends Actor {
protected def receive = {
case 1 => println("One")
}
}
val sys = ActorSystem("my")
val a = sys.actorOf(Props[Actor1], "plain_actor")
a ! 1
sys.shutdown()
}
}
然后sbt test
,我得到了
[ERROR] [01/22/2012 12:49:50.329] [default-dispatcher10] [akka://my/user/plain_actor] error while creating actor
但是当我在通常的主类而不是FunSuite中编写相同的代码,并通过sbt run
运行它时,一切正常。这两种情况有什么区别?如何让Akka演员在测试套件中正确运行?
答案 0 :(得分:2)
如果你使用Prop [X]那么X需要使用newInstance来实例化,如果你在方法内部声明它,那就不是。
在包或对象中定义Actor类,或使用Props(new Actor1)