我最近开始在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])
干杯