如何在scala中模拟`TResult DefaultsTo Document`

时间:2016-03-29 21:50:30

标签: java mongodb scala unit-testing

我正在为scala mondo驱动程序的小代理类进行单元测试。 我的方法之一是从数据库对象获取名称连接:

def collection(collectionName: String): MongoCollection[Document] = {
    logger.info("Getting collection " + collectionName)
    defaultDB.getCollection[Document](collectionName)
  }

其中defaultDBMongoDatabase类的实例。

在我的测试中,我想模仿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方法的其他选择是什么?

谢谢,

0 个答案:

没有答案