我正在为scala mondo驱动程序的小代理类进行单元测试。 我的方法之一是从数据库对象获取名称连接:
def collection(collectionName: String): MongoCollection[Document] = {
logger.info("Getting collection " + collectionName)
defaultDB.getCollection[Document](collectionName)
}
其中defaultDB
是MongoDatabase
类的实例。
在我的测试中,我想模仿getCollection
类的方法MongoDatabase
,如下:
val collection = mock[MongoCollection[Document]]
val database = mock[MongoDatabase]
when(database.getCollection[Document]("collection")).thenReturn(collection)
这个粗略的,将不会返回任何内容,因为真正的签名看起来像这样:
def getCollection[TResult](collectionName: String)(implicit e: TResult DefaultsTo Document, ct: ClassTag[TResult]): MongoCollection[TResult]
因此,我们尝试模拟其他两个隐含的参数:
implicit val e = mock[Document DefaultsTo org.mongodb.scala.Document]
implicit val classTag = mock[ClassTag[Document]]
val collection = mock[MongoCollection[Document]]
val database = mock[MongoDatabase]("collection")(e, _: ClassTag[Document])
when(database.getCollection[Document]("collection")(e, classTag)).thenReturn(collection)
现在,我收到以下错误:
[error]不允许访问受保护对象DefaultHelper 因为封装包mongo的[error]不是[error]的子类 包scala中的包bson,其中定义了目标[error] import org.mongodb.scala.bson.DefaultHelper.DefaultsTo [错误]
^ [错误] /app/process-street/test/mongo/MongoDriverSpec.scala:61:不 found:type DefaultsTo [error] implicit val e = mock [Document DefaultsTo org.mongodb.scala.Document]
事实上,DefaultHelper
受到保护......
有没有办法解决?模仿getConnection
方法的其他选择是什么?
谢谢,