Scala mock:在对象内部启动其他类实例时调用spy mock的实例
我在scala中有一个名为SomeClass的类&SomeClass对象。 现在我需要模拟在SomeClass对象中实例化的OtherClassScala mock:在对象内部启动其他类实例时调用spy mock的实例,scala,unit-testing,mockito,scalatest,scalamock,Scala,Unit Testing,Mockito,Scalatest,Scalamock,我在scala中有一个名为SomeClass的类&SomeClass对象。 现在我需要模拟在SomeClass对象中实例化的OtherClass class SomeClass { import SomeClass._ def doSomething(param1:Map[String,String],param2:Int) :String{ val returnForSomething= instanse.oth
class SomeClass {
import SomeClass._
def doSomething(param1:Map[String,String],param2:Int) :String{
val returnForSomething= instanse.otherClassFuntion(param2)
.....
}
def doSomethingElse(param:Int) :Map[String,String]{
val returnForSometingElse= instanse.otherClassFuntion(param)
....
}
object SomeClass{
lazy val instance =new OtherClass
}
我用scala mockito sugar来模拟另一个类试图监视另一个类,但当我打电话时
val instance = spy(new OtherClass)
但是当对象调用SomeClass对象中的新实例时,如何传递此实例您不能在
对象
中模拟值。它们没有允许您注入依赖项的构造函数。它们的作用与使用静态方法的类相同
class SomeClass {
import SomeClass._
def doSomething(param1:Map[String,String],param2:Int) :String{
val returnForSomething= instanse.otherClassFuntion(param2)
.....
}
def doSomethingElse(param:Int) :Map[String,String]{
val returnForSometingElse= instanse.otherClassFuntion(param)
....
}
object SomeClass{
lazy val instance =new OtherClass
}
如果确实需要此功能,则必须创建某种setter,以允许覆盖实例
:
object SomeClass {
private var _instance = new OtherClass
def instance = _instance
// put your package name in []
private[thispackage] def instance_=(newInstance: OtherClass) = _instance = OtherClass
// to make it accessible only within thispackage and its subpackages
}
然而,考虑到:
s是全局的(就像Java中的object
方法一样)static
- 全局可变状态几乎总是坏的
- 因此,如果您想编写可测试代码,那么
s(和对象
方法)应该是无状态的静态
SomeClass
中的全局值,而是通过构造函数传递的默认值,可以替换为:
class SomeClass(instance: OtherClass = SomeClass.instance) {
...
}
或者类似的