在Akka测试演员

时间:2013-11-14 19:15:36

标签: scala akka scalatest

当我运行测试演员的基础示例时:

class MySpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender
  with WordSpec with MustMatchers with BeforeAndAfterAll {

我收到了错误:

class WordSpec needs to be a trait to be mixed in

我做错了什么?

3 个答案:

答案 0 :(得分:39)

在ScalaTest 2.0中,您可以找到WordSpec的类和特征。名为WordSpec和特征的类为WordSpecLike。因此,只需使用WordSpecLike代替WordSpec

class MySpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender
  with WordSpecLike with MustMatchers with BeforeAndAfterAll {

答案 1 :(得分:7)

除了1esha提出的内容之外,akka documentation

还有一个解决方案

如果由于某种原因从TestKit继承是一个问题,因为它是一个具体的类而不是一个特征,那就是TestKitBase:

import akka.testkit.TestKitBase

class MyTest extends TestKitBase {
  implicit lazy val system = ActorSystem()

  // put your test code here ...

  shutdown(system)
}

隐式延迟val系统必须完全相同地声明(你当然可以根据需要将参数传递给actor系统工厂),因为特性TestKitBase在构造过程中需要系统。

答案 2 :(得分:-1)

从Scalatest 2.0开始,你混入的规范现在是类而不是特征。这意味着你不能将它们与Akka的测试工具包一起使用......两者都是类,你只能扩展其中一个。

切换到scalatest 1.9.1。它仍然受到它们的支持,并且是在他们做出改变并为akka用户破坏事物之前发布的最后一个版本。在1.9.1中,规格仍然是特征。