[英]How to mock an Object in Scala
我是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)
谢谢你的建议 !
尝试移动您需要测试的所有行为到类或特征级别。 您将能够在生产代码和测试代码中混合使用不同的实现。
例如:
trait CategoryApi {
def importantMethod: Int
}
class Category extends MongoBase[Category]("categories") with CategoryApi {
override def importantMethod = { /*go to mongo for real data*/ }
}
class CategoryTest with CategoryApi {
override def importantMethod = 42
}
// service which uses categories
class SomeService(catApi: CategoryApi) {
def methodToTest = {
importantMethod
}
}
// your test
test() {
val service = new SomeService(CategoryTest())
service.methodToTest == 42 // return 42...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.