我最近开始使用Scala编程。我有一个项目,其中包含相互调用的类层次结构。最后,他们最后一次调用一个调用MySQL中存储过程的单例DAL(数据访问层)对象。
我有一个带有以下签名的DAL对象:
def callStoredProcedure(procName: String, params: Array[String]): Boolean
我想编写一个调用顶级类函数的测试,并检查传递给函数的procName
。
如何为DAL对象创建模拟?我怎样才能将它注入到流程管道中,或者是否有更好/推荐的方法用一个只返回过程名称而不是调用它的模拟替换单例?
我们目前正在使用Mockito,但我对任何事情都持开放态度。
答案 0 :(得分:1)
不要直接使用单身,这不是一个好主意。你知道为什么?因为你无法模拟它们进行单元测试,呃。 把它作为你班级的参数:
class Foo {
def dal: DAL = DALImpl
}
val testMe = new Foo {
override def dal = mock[DAL]
}
或
CREATE FUNCTION informix.isdate(str VARCHAR(50), fmt VARCHAR(50))
RETURNING SMALLINT;
DEFINE d DATE;
ON EXCEPTION IN (-1277,-1267,-1263) -- other errors are possible
RETURN 0;
END EXCEPTION;
LET d = TO_DATE(str, fmt); -- acceptable date if exception not raised
IF d < MDY(1,1,1850) THEN -- dates prior to this are "logically invalid"
RETURN 0;
END IF;
RETURN 1;
END FUNCTION;
答案 1 :(得分:0)
你可以这样做:
class Foo(dal: DAL)
val testMe = new Foo(dal = mock[DAL.type])
干杯