在sarama-cluster中嘲笑NewConsumer

时间:2017-10-25 15:49:30

标签: go mocking apache-kafka ginkgo sarama

有没有办法在没有设置实际经纪人的情况下测试/模拟sarama-cluster的Ne​​wConsumer功能?我在这里缺少什么?

Code I尝试测试:

import cluster "github.com/bsm/sarama-cluster"

func initSaramaConsumer() (*cluster.Consumer, error) {
  brokers := []string{"some_url:port"}
  groups := "some_group"
  topics := []string{"some_topic"}
  config := cluster.NewConfig()

  saramaConsumer, err := cluster.NewConsumer(
    brokers, groups, topics, config,
  )

  if err != nil {
    return nil, err
  }

  return saramaConsumer, nil
}

1 个答案:

答案 0 :(得分:2)

不要调用cluster.NewConsumer,但添加一个可以在测试中换出的简单间接。例如,将函数分配给包变量(我是这样做的,一直是时间)。

package main

import (
    "testing"

    "github.com/bsm/sarama-cluster"
)

var newConsumer = cluster.NewConsumer // replaceable in tests

func initSaramaConsumer() (*cluster.Consumer, error) {
    brokers := []string{"some_url:port"}
    groups := "some_group"
    topics := []string{"some_topic"}
    config := cluster.NewConfig()

    saramaConsumer, err := newConsumer(
            brokers, groups, topics, config,
    )

    if err != nil {
            return nil, err
    }

    return saramaConsumer, nil
}

func TestInitSaramaConsumer(t *testing.T) {
    newConsumer = newMockConsumer
    defer func() { newConsumer = cluster.NewConsumer }()

    // Tests for initSaramaConsumer goes here
}

func newMockConsumer([]string, string, []string, *cluster.Config) (*cluster.Consumer, error) {
    panic("not implemented")
}