2017-10-10 7 views
0

:後オーバーロードコンストラクタを持つクラスをスタブすることができません - 私は、次のシグネチャを持つ「プロデューサー」と呼ばれるクラスをスタブしようとしていますScalamock

class Producer[K, V](private val underlying : kafka.producer.Producer[K, V]) extends scala.AnyRef { 
    def this(config : kafka.producer.ProducerConfig) = { /* compiled code */ } 
    def send(message : kafka.producer.KeyedMessage[K, V]) : scala.Unit = { /* compiled code */ } 
    def send(messages : java.util.List[kafka.producer.KeyedMessage[K, V]]) : scala.Unit = { /* compiled code */ } 
    def close : scala.Unit = { /* compiled code */ } 
} 

コードval fakeProducer = stub[Producer[String, String]]

は誤りです: enter image description here

私は今この問題を抱えています。このスタブオブジェクトを作成する方法はありますか?どんな助けもありがとう。

よろしくお願いいたします。

答えて

0

私は今すぐIDEを持っていないし、scalamock、kafka、scalaのどのバージョンを使用しているのかわからないので、正確な答えではありませんが、うまくいけばこれはあなたのアイデアです。

あなたのタイプをモックにサブクラス化し、そのサブクラスがどのコンストラクタを参照するかを明示します。

class MockableProducer extends kafka.javaapi.producer.Producer[String, String](null.asInstanceOf[kafka.producer.Producer[String,String]) 
val producer = stub[MockableProducer] 

いくつかの予期しないのNPEを与えることができ、スタブを作成するときにProducerクラスのすべての副作用がまだ実行されることに注意してください

関連する問題