编写测试以验证在Scala中将函数作为参数传递

时间:2015-02-26 03:37:27

标签: scala scalatest

我有这样的事情:

def fnA(argA: Int, argB: Int, argC: Int): Seq[Int] = {
   tryRequest {
     ...
   }
}

def tryRequest[T](f: => T): T = {
    try {
        f
    } catch {
        ...
    }
}

我试图弄清楚如何使用Mockito / ScalaTest进行测试。我想要确保1.我的返回类型是我期望的那样(当我调用fnA时Seq [Int]),或者2.当我打电话时,我正在以正确的类型传递给tryRequest it((Int,Int,Int)=>当我调用fnA时Seq [Int])。我尝试过各种变体:

exampleInstance.fnA(1, 2, 3)
there was one(exampleInstance).tryRequest(any)

但我总是得到像

这样的东西
Argument(s) are different! Wanted:
    exampleInstance.tryRequest(
        ($anonfun$apply$17) <function0>
    );

Actual invocation has different arguments:
    exampleInstance.tryRequest(
        ($anonfun$fnA$1) <function0>
    );

我有什么想法可以准确地测试这个吗?谢谢!

1 个答案:

答案 0 :(得分:0)

您并不完全清楚自己在哪里通过 - 您似乎认为自己已经将(Int, Int, Int) => Seq[Int]传递给tryRequest,但{{1}的定义你没有这样做(它在调用fnA之前已经采用Int参数)。但按照你所写的而不是代码来进行:

通常不可能比较函数的相等性,而且语法将会真正地#34;创建一个匿名包装器(你真的需要tryRequest的懒惰,因为你在那里传递一个函数吗?),因此失败了。你可以做的是确认传递给内部调用的函数具有一些与你已经传递的函数相同的属性。我不知道这种奇特的语法,但是对于一个普通的Java测试/模拟库我会做类似的事情:

=> T