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
方法,因为参与者取决于它的特定实现。