2016-12-06 53 views
0

我有一个演员以下测试类:为expectMsg类型不匹配,需要诠释

class SomeActorSpec extends TestKit(ActorSystem("testSystem")) 
    with ImplicitSender 
    with WordSpecLike with MustMatchers { 

    it should "check the id of a submitted job" { 
    val tester = TestProbe() 
    val someActorRef = system.actorOf(Props(classOf[SomeActor])) 

    tester.send(someActorRef, SomeMessage(UUID.randomUUID)) 
    tester.expectMsg(SomeReply("Not running")) 
    } 

} 

我得到这个错误:

type mismatch; 
[error] found : your.package.SomeReply 
[error] required: Int 
[error]  tester.expectMsg(SomeReply("Not running")) 

为什么会expectMsg需要Int? 我查看了使用expectMsg的不同示例,并且它能够接收Message类的子类型。

回答

2

奇怪,它从另一个范围加载隐式。我建议你写的(如你刚才的问题)是这样的:

import java.util.UUID 

import akka.actor.{Actor, ActorSystem, Props} 
import akka.testkit.{TestKit, TestProbe} 
import org.scalatest.FlatSpec 

class SomeActorSpec extends FlatSpec { 

    it should "check the id of a submitted job" in new TestScope { 
    val tester = TestProbe() 

    tester.send(someActorRef, SomeMessage(UUID.randomUUID)) 
    tester.expectMsg(SomeReply("Not running")) 
    } 

    abstract class TestScope extends TestKit(ActorSystem("testSystem")) { 
    val someActorRef = system.actorOf(Props(classOf[SomeActor])) 
    } 
} 

case class SomeMessage(v: UUID) 
case class SomeReply(msg: String) 

class SomeActor() extends Actor { 
    def receive = { 
    case msg => sender() ! SomeReply("Not running") 
    } 
} 
+0

我得到'[testSystem-akka.actor.default-调度-2] [阿卡:// testSystem/deadLetters]消息[演员[akka:// testSystem/deadLetters]的演员[akka:// testSystem/user/$ b#287753151]中的my.package $ StateActor $ SomeReply]没有传送。 [1]遇到了死信。可以关闭此日志记录,也可以使用配置设置'akka.log-dead-letters'和'akka.log-dead-letters-during-shutdown'来调整日志记录。 '我应该修改哪些代码? – octavian

+0

我已将'ImplicitSender'添加到'TestScope',但错误仍然存​​在。 – octavian

+2

没关系,我正在关闭发件人。 – octavian

相关问题