代码之家  ›  专栏  ›  技术社区  ›  nads

如何模拟在scala类中使用的kafkaproducer

  •  1
  • nads  · 技术社区  · 7 年前

    我想为scala类编写一个单元测试。该类的目的是收集度量并将其发布到卡夫卡主题上。我试图在单元测试中模拟生产者,以确保其余代码的健全性。以下是我的课程的简化版本:

    class MyEmitter(sparkConf: SparkConf) {
        <snip> -- member variables
        private val kafkaProducer = createProducer()
    
    def createProducer(): Producer[String, MyMetricClass] = {
        val props = new Properties()
        ...
        Code to initialize properties
        ...
    
        new KafkaProducer[String, MyMetricClass](props)
    }
    
    def initEmitter(metricName: String): SomeClass = {
        // Some implementation
    }
    
    def collect(key: String, value: String): Unit = {
        // Some implementation
    }
    
    def emit(): Unit = {
        val record = new ProducerRecord("<topic name>", "<key>", "<value>")
        kafkaProducer.send(record)
    }
    

    在我的单元测试中,我想做的是模拟生产者并检查 Sead() 已经调用了命令,如果调用了命令,那么生产者记录是否符合预期。我自己找不到解决办法。在谷歌上搜索解决方案也没有结果。如果有人知道如何解决这个问题,我将非常感激。

    1 回复  |  直到 7 年前
        1
  •  2
  •   ultrasecr.eth    7 年前

    def createProducer(
            producer: Properties => KafkaProducer = props => new KafkaProducer[String, MyMetricClass](props)
            ): Producer[String, MyMetricClass] = {
    
       val props = new Properties()
       producer(props)
    }
    

    myEmmiter.createProducer()
    

    val producerMock = mock[KafkaProducer]    
    myEmmiter.createProducer(_ => producerMock)
    

    props

    推荐文章