1
私はアプリケーションで永続性としてMongodbを使用していますが、現在私のコードのテストを書いています。私のCUTは次のようになりますScalamock:一般的なケースクラスを模擬してタイプミスマッチが発生する
implicit def storageHandler[M[_]: Monad](
implicit mongoDatabase: MongoDatabase
) = new Storage.Handler[M] {
override def store(order: Order): M[Unit] = Monad[M].pure {
val collection: MongoCollection[Document] = mongoDatabase.getCollection("order")
val document: Document = Document(order.asJson.toString)
collection.insertOne(document).subscribe((x: Completed) =>())
}
}
私のモックがインプリシットを使用して正しく注入されています。私は別のモックを生じるはずであるそれ自身の上のどのgetCollectionコールをからかってる、タイプ
MongoCollection[org.mongodb.scala.bson.collection.immutable.Document]
のこの時間は、だから私はやっている以下の
val mongoCollection: MongoCollection[Document] = mock[MongoCollection[Document]]
(mongoDatabase.getCollection[Document] _).expects("order").once().returning(mongoCollection)
しかし、以下では、この結果であり、エラー
type mismatch;
[error] found : com.mongodb.async.client.MongoCollection[TResult]
[error] required: com.mongodb.async.client.MongoCollection[org.mongodb.scala.bson.collection.immutable.Document]
[error] val mongoCollection: MongoCollection[Document] = mock[MongoCollection[Document]]
TResultは、次のようになりますするMongoCollection、より汎用的なパラメータです:
case class MongoCollection[TResult](private val wrapped: JMongoCollection[TResult]) {
....
}
あなたのインターフェースが完全に抽象的である場合
こんにちは、あなたがこのバグに出くわしたように見えます:https://github.com/paulbutcher/ScalaMock/issues/170。これはうまくいっていますが、修正するのが難しい –
@PhilippMこの問題を回避する方法はありますか? –