我正在尝试模拟org.apache.kafka.clients.producer.KafkaProducer
。
但是由于类的实现,模拟失败。输入参数经过验证,如果为null,则抛出null指针异常。
我该如何嘲笑它?
我认为失败的原因是,类KafkaProducer
的第一个参数是扩展了ProducerConfig
的{{1}}。它验证传递的属性。如果为null,则将引发null指针异常。
AbstractConfig
import org.apache.kafka.clients.producer.{KafkaProducer, ProducerConfig}
import org.scalamock.scalatest.MockFactory
object MyProducerTest extends MockFactory with App {
val mockKafkaProducer = mock[KafkaProducer[String,String]]
}
答案 0 :(得分:0)
我认为您可以尝试使用自己的自定义类扩展对象。
class MyKafkaProducer extends KafkaProducer[String, String]()
val mockKafkaProducer = mock[MyKafkaProducer]
或者,模拟在您的KafkaProducer上方进行调用的类。像这样:
# main:
class BusinessApp {
// create a KafkaProducer
def sendMessage(msg: String) = {
kafkaProducer.send(new ProducerRecord(msg))
}
}
# tests:
val mockBusinessApp = mock[BusinessApp]
(mockBusinessApp.sendMessage _).expects("test").returns(true)
那么您就不是在嘲笑KafkaProducer的较低级API。
请注意,您可以使用embedded kafka,而不必完全模拟KafkaProducer,并且可以获取在测试过程中产生/消耗的实际消息。