如何在Scala中使用mock来模拟单例对象



我最近开始在Scala中编程。我有一个项目,它有一个相互调用的类的层次结构。最后,他们调用了一个单独的DAL(数据访问层)对象,该对象调用MySQL中的存储过程。

我有一个DAL对象,其签名如下:

def callStoredProcedure(procName: String, params: Array[String]): Boolean

我想编写一个测试,调用顶级类的一个函数,并检查传递给该函数的procName是什么。

如何为DAL对象创建一个mock?我如何将它注入到流程管道中,或者有没有更好/推荐的方法用只返回过程名称而不是调用它的mock替换singleton?

我们目前正在使用Mockito,但我对任何事情都持开放态度。

不要直接使用singleton,这不是一个好主意。你知道为什么吗?因为你不能嘲笑他们进行单元测试,duh。将其作为类的参数:

trait DAL {
  def callStoredProcedure(procName: String, params: Array[String]): Boolean       
}
object DALImpl extends DAL {
    def callStoredProcedure(procName: String, params: Array[String]): Boolean = doStuff
}
class Foo(dal: DAL = DALImpl) 
val testMe = new Foo(mock[DAL])

class Foo {
    def dal: DAL = DALImpl
}
val testMe = new Foo {
  override def dal = mock[DAL]
}

你可以做:

class Foo(dal: DAL)
val testMe = new Foo(dal = mock[DAL.type])

干杯

相关内容

  • 没有找到相关文章