0

私はスカラモックを使用しておりclose()、RabbitMQcom.rabbitmq.client.Channelクラスのメソッドが呼び出されていることを確認しようとしています。問題は、close()メソッドが と の 2 つのオプションでオーバーロードされて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()オーバーロードされたどの関数を呼び出すかについてコンパイラが混乱しているため、上の行はコンパイルされません。

オーバーロードされた関数の引数なしバージョンが呼び出されることを確認するにはどうすればよいですか?

4

2 に答える 2

1

関数に明示的な型注釈を追加できます。この場合、戻り値の型が void の引数なしのメソッドなので、次のようになります。

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

同様に、他のオーバーロードされた署名と一致させるには、次のようになります

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