繁体   English   中英

如何在Scala中模拟Object

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM