验证在scalamock中调用重载函数的无参数版本

时间:2015-06-16 17:02:11

标签: scala rabbitmq scalamock

我正在使用scalamock并且我正在尝试验证RabbitMQ close()类中的com.rabbitmq.client.Channel方法是否被调用。问题是close()方法超载了两个选项:close()close(int, String)。我想验证是否正在调用no arg版本。

我尝试过以下代码:

import com.rabbit.client.Channel
import org.scalatest.Wordspec
import org.scalamock.scalatest.MockFactory

class MessageSubscriberSpecs extends WordSpec with MockFactory {
  "A message subscriber" when {
    "closing a connection" should {
      // ... More test setup

      "close the underlying connection" in {
        val channelStub = stub[Channel]
        (channelStub.close _).verify()
      }
    }
  }
}

上面带有verify()的行无法编译,因为编译器对要调用的重载函数感到困惑。

如何验证调用重载函数的无参数版本?

2 个答案:

答案 0 :(得分:1)

您可以为该函数添加显式类型注释。在这种情况下,它是一个带有void返回类型的no args方法,因此它将是:

(channelStub.close _: () => Unit).verify()

同样匹配其他重载签名,它将是

(channelStub.close _: (Int,String) => Unit).verify(*,*)

答案 1 :(得分:0)

是的,它应该创建哪个函数感到困惑:Function2(() => channelStub.close()).verify() (即带有0或2个参数的函数)

让我们通过显式定义一个带0参数的函数来解决这个问题!

function double(d) {
  return 2*d;
}