我是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)
感谢您的任何建议!
答案 0 :(得分:4)
尝试将您需要测试的所有行为移动到类或特征级别。 您将能够在生产代码和测试代码中混合使用不同的实现。
例如:
def publish(self):
self.published = True
self.pub_date = datetime.datetime.now()
self.save()