J'utilise Mongodb comme persistance dans mon application et j'écris actuellement un test pour mon code. Mon CUT ressemble à ce qui suitScalamock: se moquer d'une classe de cas générique entraîne une incompatibilité de type
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) =>())
}
}
Mon modèle est injecté correctement en utilisant des implicits. Je suis moqueur l'appel getCollection qui sur son propre devrait aboutir à une autre maquette, cette fois de type
MongoCollection[org.mongodb.scala.bson.collection.immutable.Document]
donc ce que je fais est le
suivantval mongoCollection: MongoCollection[Document] = mock[MongoCollection[Document]]
(mongoDatabase.getCollection[Document] _).expects("order").once().returning(mongoCollection)
Mais ce résultat dans ce qui suit erreur
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 est le paramètre générique du MongoCollection, qui ressemble à ceci:
case class MongoCollection[TResult](private val wrapped: JMongoCollection[TResult]) {
....
}
Il semble que le paramètre générique est pas correctement « ajusté » (je ne sais pas comment l'appeler) au document
Salut, on dirait que vous avez rencontré ce bug: https://github.com/paulbutcher/ScalaMock/issues/170. Il est en cours d'élaboration, mais difficile à corriger –
@PhilippM Y at-il une solution de contournement pour cela? –