无法使用重载的构造函数存根类 - Scalamock

时间:2017-10-10 09:57:02

标签: scala unit-testing scalamock

我正在试图将一个名为' 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]]

以下是错误: enter image description here

我一直坚持这个问题。有没有办法可以创建这个存根对象?任何帮助将不胜感激。

最诚挚的问候。

1 个答案:

答案 0 :(得分:0)

不是一个确切的答案,因为我现在没有IDE,也不确定你使用哪个版本的scalamock,kafka,scala,但希望这会给你一个有效的想法。

我会将你的类型子类化为mock并明确指明子类引用的构造函数。

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

请注意,创建存根时,Producer类的所有副作用仍然会运行,这会产生一些意外的NPE