【问题标题】:Testing Actors in Akka在 Akka 中测试 Actor
【发布时间】:2013-11-27 23:27:24
【问题描述】:

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

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

我做错了什么?

【问题讨论】:

    标签: scala akka scalatest


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      import akka.testkit.TestKitBase
      
      class MyTest extends TestKitBase {
        implicit lazy val system = ActorSystem()
      
        // put your test code here ...
      
        shutdown(system)
      }
      

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 特征仍然存在并以Like 后缀命名。以WordSpecLike 为例
        • 那么,这就是你上面需要的答案。在您的测试规范中添加“喜欢”一词。
        猜你喜欢
        • 2019-02-12
        • 2012-05-20
        • 2014-08-14
        • 2020-10-04
        • 1970-01-01
        • 2015-05-07
        • 2020-06-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多