0

我正在使用 scalamock 并试图验证close()RabbitMQcom.rabbitmq.client.Channel类中的方法是否被调用。问题是该close()方法重载了两个选项:close()close(int, String). 我想验证是否调用了无参数版本。

我尝试了以下代码:

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()on 的行无法编译,因为编译器对调用哪个重载函数感到困惑。

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

4

2 回答 2

1

您可以为函数添加显式类型注释。在这种情况下,它是一个返回类型为 void 的无参数方法,所以它是:

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

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

(channelStub.close _: (Int,String) => Unit).verify(*,*)
于 2016-01-25T21:00:32.107 回答
0

是的,它对应该创建哪个函数感到困惑:Function0或者Function2(即具有 0 或 2 个参数的函数)

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

(() => channelStub.close()).verify()
于 2015-06-16T21:03:52.740 回答