29

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

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

我究竟做错了什么?

4

3 回答 3

39

在 ScalaTest 2.0 中,您可以找到WordSpec. 名为WordSpec和 trait 的类是WordSpecLike. 所以只需使用WordSpecLike而不是WordSpec

class MySpec(_system: ActorSystem) extends TestKit(_system) with ImplicitSender
  with WordSpecLike with MustMatchers with BeforeAndAfterAll {
于 2013-11-15T03:36:42.177 回答
7

除了 1esha 提出的,akka 文档中还有一个解决方案

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

import akka.testkit.TestKitBase

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

  // put your test code here ...

  shutdown(system)
}

隐式惰性验证系统必须完全像那样声明(您当然可以根据需要将参数传递给参与者系统工厂),因为 trait TestKitBase 在其构建期间需要系统。

于 2013-11-15T14:04:44.953 回答
-1

从 Scalatest 2.0 开始,您混合的 Specs 现在是类而不是特征。这意味着您不能将它们与 Akka 的测试套件一起使用……它们都是类,您只能扩展其中一个。

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

于 2013-11-14T19:51:22.053 回答