2016-12-06 49 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

相關問題