Scala 将helper静态方法提取到objec中

Scala 将helper静态方法提取到objec中,scala,object,Scala,Object,我有一些课: class MyActor extends Actor{ override def receive: Receive = { case s: String => doSome() case i: Int => //something else } } object MyActor{ def doSome() = //some action } 这是Scala的惯用方式吗?我这样做是为了简化测试Actor。我

我有一些课:

class MyActor extends Actor{

    override def receive: Receive = {
        case s: String => doSome()
        case i: Int => //something else
    }

}

object MyActor{
    def doSome() = //some action
}
这是Scala的惯用方式吗?我这样做是为了简化测试
Actor
。我不想在我的特定案例中创建
ActorSystem
并编写集成测试


这样做很常见吗?

不,惯用的方法是将这些方法提取到特征中,并让参与者扩展该特征:

trait DoSomething {
   def doSome() = {
      println("Doing something")
   }
}

class MyActor extends Actor with DoSomething {
    override def receive: Receive = {
        case s: String => doSome()
        case i: Int => //something else
    }
}

不,惯用的方法是将这些方法提取到特征中,并让参与者扩展该特征:

trait DoSomething {
   def doSome() = {
      println("Doing something")
   }
}

class MyActor extends Actor with DoSomething {
    override def receive: Receive = {
        case s: String => doSome()
        case i: Int => //something else
    }
}

您将如何为
MyActor
提供
DoSomething
的实现?如果只是通过实现
doSome()
-我看不出有什么区别。实现将在后面。您会为
MyActor
提供
DoSomething
的实现吗?如果仅仅通过实现
doSome()
,我看不出有什么区别。如果重点是单独测试
MyActor.doSome()
,我觉得很好,所以我想知道Jon在提出
trait
时有什么想法。但我认为使用akka testkit对参与者进行集成测试以验证状态转换/FSM仍然很重要。使用
object
s会使测试更加困难。例如,如果您想对实际的参与者本身进行单元测试,则没有办法模拟或删除
doSome
方法,因为参与者取决于它的特定实现。如果测试点是
MyActor.doSome()
与世隔绝-在我看来很好,所以我想知道Jon在提出
trait
时有什么想法。但我认为使用akka testkit对参与者进行集成测试以验证状态转换/FSM仍然很重要。使用
object
s会使测试更加困难。例如,如果您想对实际的参与者本身进行单元测试,就没有办法模拟或删除
doSome
方法,因为参与者取决于它的特定实现。