私は、暗黙的なパラメータが関係しているときに、Scalaでテストを書く方法を理解しようとするのに苦労しています。暗黙的なパラメータを嘲笑するスカラテスト?
私は私のコードとテストの次(ショートバージョン)があります。
実装(Scalaの2.10を、スプレーしアッカ):(ScalaTestとMockito使用)
import spray.httpx.SprayJsonSupport._
import com.acme.ResultJsonFormat._
case class PerRequestIndexingActor(ctx: RequestContext) extends Actor with ActorLogging {
def receive = LoggingReceive {
case AddToIndexRequestCompleted(result) =>
ctx.complete(result)
context.stop(self)
}
}
object ResultJsonFormat extends DefaultJsonProtocol {
implicit val resultFormat = jsonFormat2(Result)
}
case class Result(code: Int, message: String)
テスト:
を"Per Request Indexing Actor" should {
"send the HTTP Response when AddToIndexRequestCompleted message is received" in {
val request = mock[RequestContext]
val result = mock[Result]
val perRequestIndexingActor = TestActorRef(Props(new PerRequestIndexingActor(request)))
perRequestIndexingActor ! AddToIndexRequestCompleted(result)
verify(request).complete(result)
}
}
この行のverify(request).complete(result)
は、暗黙のMarshallerを使用してResult
をJSONに変換します。
implicit val marshaller: Marshaller[Result] = mock[Marshaller[Result]]
を追加することで、マーシャラーを追加することはできますが、テストを実行すると、Marshallerの別のインスタンスが使用されるため、検証に失敗します。
モックマーシャルを明示的にcomplete
に渡しても、失敗します。
したがって、暗黙のパラメータ用の模擬オブジェクトを作成する方法をアドバイスし、インスタンスが使用されていることを確認することはできますか?
モックを明示的に渡すのに失敗しますか?なぜモックマーシャラーを最初に使用したいのですか? (私はモチートを使っていないので、もしそれらが愚かな質問であれば私を容赦してください) – jrudolph