1

我正在尝试使用以下签名对名为“Producer”的类进行存根:

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]]

以下是错误: 在此处输入图像描述

我已经被这个问题困扰了一段时间了。有没有办法我们可以创建这个存根对象?任何帮助,将不胜感激。

此致。

4

1 回答 1

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]

请注意,Producer当创建存根时,类的所有副作用仍会运行,这可能会产生一些意想不到的 NPE

于 2017-10-12T07:47:44.483 回答