2017-10-23 7 views
0

私はAkkaアクターモデルでテストメソッドを学習しています。私はAkkaのドキュメントからいくつかのコードを実行しようとしました。次のコードを実行すると、混乱するエラーが発生します。私はJDK 1.8.121、macOS、およびScala 2.12を使用しています。Akkaドキュメンテーションのテストコードが奇妙に実行される

Akka documentationからコード:

package TestKitDemo 

import akka.actor.ActorSystem 
import akka.actor.Status.Success 
import akka.testkit.{TestKit, TestProbe} 
import org.scalatest.{BeforeAndAfterAll, WordSpecLike} 
import akka.pattern.ask 
import akka.util.Timeout 

import scala.concurrent.duration._ 
import scala.util.Try 

class ReplyDemo extends TestKit(ActorSystem("Testsystem")) with WordSpecLike 
with BeforeAndAfterAll{ 
// import system.dispatcher 
    override protected def afterAll(): Unit = { 
    shutdown(system) 
    } 

    implicit val timeout = Timeout(2 seconds) 
    "reply" should { 
    "same" in { 

     val probe = TestProbe() 
     val future = probe.ref ? "hello" 
     probe.expectMsg(0 millis, "hello") // TestActor runs on CallingThreadDispatcher 
     probe.reply("world") 


     // error 
     assert(future.isCompleted && future.value == Some(Success("world"))) 

     // correct 
//  assert(future.isCompleted && future.value.get == Try("world")) 

    } 
    } 
} 

は、私がassertの2種類を使用します:私は自分のコンピュータ上でテストを設定

val probe = TestProbe() 
val future = probe.ref ? "hello" 
probe.expectMsg(0 millis, "hello") // TestActor runs on CallingThreadDispatcher 
probe.reply("world") 
assert(future.isCompleted && future.value == Some(Success("world"))) 

1はAkka documentation内のコードで、他はTryを使った私自身の平等テストです。

私はTryについて考えています。私の知る限り、TryのタイプはSuccessまたはFailureです。

試験誤差は以下である:

future.isCompleted was true, but Some(Success("world")) did not equal Some(Success(world)) 
ScalaTestFailureLocation: TestKitDemo.ReplyDemo at (ReplyDemo.scala:44) 
Expected :Some(Success(world)) 
Actual :future.isCompleted was true, but Some(Success("world")) 

Some(Success("world"))Some(Success(world))に等しくありません。どうしましたか?彼らは平等でなければならない。あなたがakka.actor.Status.Success代わりのscala.util.Successに一致しようとしているので、

答えて

0
assert(future.isCompleted && future.value == Some(Success("world"))) 

上記主張は、あなたのテストに失敗した理由があります。

import scala.util.Success 

import akka.actor.Status.Success 

を交換し、テストを通過します。