我正在使用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()
的行无法编译,因为编译器对要调用的重载函数感到困惑。
如何验证调用重载函数的无参数版本?
答案 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;
}