我正在使用scalamock,并试图验证RabbitMQ com.rabbitmq.client.Channel
类中的close()
方法是否被调用。问题是close()
方法重载了两个选项:close()
和close(int, String)
。我想验证是否调用了无 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()
的行无法编译,因为编译器对要调用哪个重载函数感到困惑。
如何验证是否调用了重载函数的 no arg 版本?
可以为函数添加显式类型注释。在这种情况下,它是一个具有 void 返回类型的 no args 方法,因此它将是:
(channelStub.close _: () => Unit).verify()
同样,为了匹配其他重载的签名,它将是
(channelStub.close _: (Int,String) => Unit).verify(*,*)
是的,它混淆了它应该创建哪个函数:Function0
或Function2
(即具有 0 或 2 个参数的函数)
因此,让我们通过显式定义一个参数为 0 的函数来解决这个问题!
(() => channelStub.close()).verify()