2016-12-07 2 views
1

У меня есть следующий тест:не соответствующий конструктор не нашел на классе аргументов []

it should "ask yarn about the running jobs" in new TestScope { 
    val testSender: TestProbe = TestProbe() 
    val testReceiver: TestProbe = TestProbe() 
    val yarnActorRef = system.actorOf(YarnActor.props(testReceiver.ref)) 

    testSender.send(yarnActorRef, UpdateListOfJobs(Instant.now())) 
    testReceiver.expectMsg(YarnJobStatus("Not running")) 
    } 

Для этого актера:

object YarnActor { 
    trait Message 

    case class UpdateListOfJobs(timeStamp: Instant) extends Message 

    def props(stateActorRef: ActorRef) = Props(new YarnActor(stateActorRef)) 
} 

class YarnActor(stateActorRef: ActorRef) extends Actor with ActorLogging { 
    override def receive: Receive = { 
    case UpdateListOfJobs(timeStamp) => { 
     //check if the job is still running 
     val address = url("someUrlAddress") 
     val status: Future[String] = Await.ready(Http(address OK as.String), 1 second) 

     status onComplete { 
     case Success(message) => stateActorRef ! YarnJobStatus(message) 
     case Failure(_) => stateActorRef ! YarnJobStatus("Not running") 
     } 
    } 
    } 
} 

я получаю:

[info] - should ask yarn about the running jobs *** FAILED *** 
[info] java.lang.IllegalArgumentException: no matching constructor found on class myPackage.YarnActor for arguments [] 

Почему появляется эта ошибка? В сопутствующем объекте я строю свой актер с 1 параметром (который должен быть всем, что ему нужно).

+0

, которые HTTP-клиент вы используете? –

+0

'dispatch' http://dispatch.databinder.net/Dispatch.html – octavian

ответ

0

Я не использую spec2, но код, как это работает с scalatest

import akka.actor._ 
import akka.testkit.{ImplicitSender, TestKit, TestProbe} 
import dispatch._ 
import org.joda.time.Instant 
import org.scalatest.{FlatSpecLike, Matchers} 

import scala.concurrent.duration._ 
import scala.concurrent.{Await, Future} 
import scala.util.{Failure, Success} 


case class YarnJobStatus(message: String) 
object YarnActor { 
    trait Message 

    case class UpdateListOfJobs(timeStamp: Instant) extends Message 

    def props(stateActorRef: ActorRef) = 
    Props(new YarnActor(stateActorRef)) 
} 

class YarnActor(stateActorRef: ActorRef) 
    extends Actor with ActorLogging { 
    import Defaults._ 
    import YarnActor._ 

    override def receive: Receive = { 
    case UpdateListOfJobs(timeStamp) => { 
     //check if the job is still running 
     val addr = url("http://127.0.0.1") 

     val status: Future[String] = Await.ready(Http(addr OK as.String), 2 second) 

     status onComplete { 
     case Success(message) => stateActorRef ! YarnJobStatus(message) 
     case Failure(_) => stateActorRef ! YarnJobStatus("Not running") 
     } 
    } 
    } 
} 

class ActorSpec extends TestKit(ActorSystem("MySpec")) 
    with ImplicitSender with FlatSpecLike with Matchers { 

    it should "ask yarn about the running jobs" in { 
     val testSender: TestProbe = TestProbe() 
     val testReceiver: TestProbe = TestProbe() 
     val yarnActorRef = system.actorOf(YarnActor.props(testReceiver.ref)) 

     testSender.send(yarnActorRef, YarnActor.UpdateListOfJobs(Instant.now())) 
     testReceiver.expectMsg[YarnJobStatus](YarnJobStatus("Not running")) 
    } 
} 
Смежные вопросы