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

时间:2016-04-04 22:39:58

标签: scala testing mocking mockito scalatest

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

我有一个带有以下签名的DAL对象:

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

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

如何为DAL对象创建模拟?我怎样才能将它注入到流程管道中,或者是否有更好/推荐的方法用一个只返回过程名称而不是调用它的模拟替换单例?

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

2 个答案:

答案 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])

干杯