【发布时间】:2015-08-06 07:39:56
【问题描述】:
我是 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,然后使用依赖注入而不是直接引用对象。
-
能否做一些代码示例以便清楚理解?
-
我做了这样的事情
object Category extends MongoBase[Category]("categories") with MyCategoryclass MyNewCategory { val service: MyCategory = Category }trait MyCategory { def test = 42 }并进行了测试:val mockCategory = mock[MyCategory] val category = new MyNewCategory { override val service = mockCategory } category.service.test returns 222 category.service.test must beEqualTo(42)这是另一个失败的测试原因类别试图与 mongo 连接
标签: scala unit-testing mockito specs2