如何在Scala中模拟Object

时间:2015-08-06 07:39:56

标签: scala unit-testing mockito specs2

我是scala的新手。我正在尝试在我的对象类别中使用UT方法,使用Specs2表示UT,使用Mockito表示模拟。我为什么要嘲笑这个?因为这个方法从mongo获取一些数据。 有我的例子

object Category extends MongoBase[Category]("categories") {
....
def myMethod(str: String): String
....
}

我试图以这种方式模仿对象:

val mockCategory = mock[Category.type]
mockCategory.myMethod("1") returns "2"

但是我的测试失败了

   Cannot mock/spy class 
Mockito cannot mock/spy following:
  - final classes
  - anonymous classes
  - primitive types
org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class
Mockito cannot mock/spy following:
  - final classes
  - anonymous classes
  - primitive types
    at CategoryMockSpec.mock(CategoryMockSpec.scala:14)
    at CategoryMockSpec$$anonfun$1$$anonfun$apply$1.apply(CategoryMockSpec.scala:18)
    at CategoryMockSpec$$anonfun$1$$anonfun$apply$1.apply(CategoryMockSpec.scala:16)

感谢您的任何建议

1 个答案:

答案 0 :(得分:4)

尝试将您需要测试的所有行为移动到类或特征级别。 您将能够在生产代码和测试代码中混合使用不同的实现。

例如:

def publish(self):
    self.published = True
    self.pub_date = datetime.datetime.now()
    self.save()